Rails验证RGB十六进制

时间:2015-06-05 20:13:36

标签: regex ruby-on-rails-4

我很难让这个十六进制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

有什么建议吗?

2 个答案:

答案 0 :(得分:6)

anchors与您的模式一起使用......

function getURL() {         
    if(!validate()) return; // Blocks execution if validation fails.
    alert("url:" + url);
}

答案 1 :(得分:1)

您可以使用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