【问题标题】:Rails validate RGB hexRails 验证 RGB 十六进制
【发布时间】:2015-06-05 20:13:35
【问题描述】:

我很难让这个十六进制 RGB 验证通过测试:

validates_format_of :primary_color, with: /#?([A-F0-9]{6}|[A-F0-9]{3})/i

我正在测试以下值:

  • sdf(应该失败)
  • 123ADG(应该失败)
  • 336699(应该通过)
  • FFF(应该通过)

除“123ADG”外,所有测试均有效。它似乎通过了验证(意味着 HEX 值无效并且应该失败,但它通过了)。

我也尝试过这种正则表达式的变体,但无济于事:

validates_format_of :primary_color, with: /#?([A-F0-9]{3}){1,2}/i

有什么建议吗?

【问题讨论】:

    标签: regex ruby-on-rails-4


    【解决方案1】:

    在您的模式中使用anchors ...

    /\A#?(?:[A-F0-9]{3}){1,2}\z/i
    

    【讨论】:

    • 然后我们开始了 :) 使用 ^ 和 $ 会产生错误,所以我现在看到 \A 和 \z 是单行替代方案。谢谢!
    【解决方案2】:

    您可以使用 Ruby \h 字符类:

    /\A#(?:\h{3}){1,2}\z/

    分解如下:

    A#       should starts with #
    (
     ?:      non-capturing group
     \h      a hexdigit character ([0-9a-fA-F])
     {3}     three times
    )
    {1,2}    repeat either once or twice
    

    因此\h 不需要/i 修饰符,因此也不需要小写\z

    【讨论】:

      猜你喜欢
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 2020-11-14
      • 2015-10-12
      相关资源
      最近更新 更多