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

Avi*_*ash 66 regex colors

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

例如: #CCCCCC

Joe*_*oey 138

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

解剖:

^              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
Run Code Online (Sandbox Code Playgroud)

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

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

  • @MichaelDausmann:不,你会接受3到6个十六进制数字之间的任何东西. (4认同)
  • 正则表达式似乎也匹配“#a14dda4”,这不是有效的十六进制颜色 (3认同)

MSa*_*ers 16

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

^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$
Run Code Online (Sandbox Code Playgroud)

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

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

  • 此正则表达式也将匹配 #1234 和 #12345。但是,只能有 3 位或 6 位。此 RE 允许 3 到 6 位数字之间的任何内容。如果您真的想捕获正确的结构,那么您必须使用`#([1-9a-fA-F]{3}|[1-9a-fA-F]{6})`。如果您想捕获单个颜色组件,它会变得更加复杂(您的建议也不会这样做)。 (2认同)
  • @MSalters这仍然不太正确,因为它返回#FFFF的最后3位数的匹配.添加一组额外的括号:`^#(([0-9a-fA-F] {2}){3} |([0-9a-fA-F]){3})$`修复它. (2认同)

chh*_*vey 8

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

\n\n
/^#(?:(?:[\\da-f]{3}){1,2}|(?:[\\da-f]{4}){1,2})$/i\n
Run Code Online (Sandbox Code Playgroud)\n\n

分解:

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

请注意,上面的内容并不等同于以下语法,这是不正确的:

\n\n
/^#(?:[\\da-f]{3,4}){1,2}$/i\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n


Fra*_*oMM 5

如果您也想接受命名颜色和 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)


Sam*_*zar 5

所有答案都提到了 RGB 格式,这里是 ARGB 格式的正则表达式:

^#[0-9a-fA-F]{8}$|#[0-9a-fA-F]{6}$|#[0-9a-fA-F]{4}$|#[0-9a-fA-F]{3}$
Run Code Online (Sandbox Code Playgroud)