如何识别给定的字符串是十六进制颜色格式

时间:2009-10-28 10:21:28

标签: regex colors

我正在寻找一个正则表达式来验证ASP.NET C#和
中的十六进制颜色 我也在服务器端寻找验证代码。

例如:#CCCCCC

8 个答案:

答案 0 :(得分:128)

^#(?:[0-9a-fA-F]{3}){1,2}$

解剖:

^              anchor for start of string
#              the literal #
(              start of group
 ?:            indicate a non-capturing group that doesn't generate backreferences
 [0-9a-fA-F]   hexadecimal digit
 {3}           three times
)              end of group
{1,2}          repeat either once or twice
$              anchor for end of string

这将匹配可在CSS中使用的任意十六进制颜色值,例如#91bf4a#f13

注意:但不支持RGBA十六进制颜色值。

答案 1 :(得分:16)

与其他解决方案略有不同。我会说

^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$

原因是这(正确)捕获了各个RGB组件。另一个表达式分为#112233,分为三部分,'#'112 233.语法实际上是'#'(RR GG BB)| (R G B)

轻微的缺点是需要更多的回溯。在解析#CCC时,你不知道第二个C是绿色组件,直到你到达字符串的末尾;在解析#CCCCCC时,你不知道第二个C仍然是红色组件的一部分,直到你看到第四个C.

答案 2 :(得分:3)

如果你想接受命名颜色和rgb(a,b,c)。最后的“i”是不区分大小写的。

HTML颜色(#123,rgb不接受)

/^(#[a-f0-9]{6}|black|green|silver|gray|olive|white|yellow|maroon|navy|red|blue|purple|teal|fuchsia|aqua)$/i

CSS颜色(#123,接受rgb)

/^(#[a-f0-9]{6}|#[a-f0-9]{3}|rgb *\( *[0-9]{1,3}%? *, *[0-9]{1,3}%? *, *[0-9]{1,3}%? *\)|rgba *\( *[0-9]{1,3}%? *, *[0-9]{1,3}%? *, *[0-9]{1,3}%? *, *[0-9]{1,3}%? *\)|black|green|silver|gray|olive|white|yellow|maroon|navy|red|blue|purple|teal|fuchsia|aqua)$/i

答案 3 :(得分:3)

所有答案均提及RGB格式, 这是ARGB格式的正则表达式:

^#[0-9a-fA-F]{8}$|#[0-9a-fA-F]{6}$|#[0-9a-fA-F]{4}$|#[0-9a-fA-F]{3}$

答案 4 :(得分:2)

根据MSalters的回答,但防止错误匹配,以下工作

^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$

或者是可选的哈希#符号:

^#?(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$

没有生成后引用:

^#?(?:(?:[0-9a-fA-F]{2}){3}|(?:[0-9a-fA-F]){3})$

答案 5 :(得分:0)

这应该匹配任何#rgb#rgba#rrggbb#rrggbbaa语法:

/^#(?:(?:[\da-f]{3}){1,2}|(?:[\da-f]{4}){1,2})$/i

细分:

^            // start of line
#            // literal pound sign, followed by
(?:          // either:
  (?:          // a non-capturing group of:
    [\da-f]{3}   // exactly 3 of: a single digit or a letter 'a'–'f'
  ){1,2}       // repeated exactly 1 or 2 times
|            // or:
  (?:          // a non-capturing group of:
    [\da-f]{4}   // exactly 4 of: a single digit or a letter 'a'–'f'
  ){1,2}       // repeated exactly 1 or 2 times
)
$            // end of line
i            // ignore case (let 'A'–'F' match 'a'–'f')

请注意,以上等效于此语法,这是不正确的:

/^#(?:[\da-f]{3,4}){1,2}$/i

这将允许3个一组,然后是4个一组,例如#1234567,这不是有效的十六进制颜色。

答案 6 :(得分:0)

Ruby

在Ruby中,您可以访问\h(十六进制)字符类。您还必须更加注意行尾,因此\A...\z而不是更常见的^...$

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

这将匹配#后面的3或6个十六进制字符。因此没有RGBA。即使没有i标志,它也不区分大小写。

答案 7 :(得分:-1)

  

/ ^#([A-Fa-f0-9] {6})$ /

此RegExp匹配以#开头,后跟数字1 to 9 && a to f && A to F6 char的字符串