我正在寻找一个正则表达式来验证ASP.NET C#和
中的十六进制颜色
我也在服务器端寻找验证代码。
例如:#CCCCCC
答案 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中,您可以访问\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 F
到6 char
的字符串