我正在寻找一个正则表达式来验证ASP.NET C#中的十六进制颜色,并且
还在寻找用于服务器端验证的代码。
例如: #CCCCCC
Answers:
^#(?:[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十六进制颜色值。
与其他解决方案略有不同。我会说
^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$
原因是(正确)捕获了各个RGB分量。另一个表达式将#112233分为三个部分,即“#” 112233。语法实际上是“#”(RR GG BB)|。(RGB)
轻微的缺点是需要更多的回溯。解析#CCC时,直到您击中字符串的末尾,您才知道第二个C是绿色分量。解析#CCCCCC时,直到看到第四个C,您才知道第二个C仍然是红色部分的一部分。
#([1-9a-fA-F]{3}|[1-9a-fA-F]{6})
。如果要捕获各个颜色分量,它会变得更加复杂(您的建议也不能做到这一点)。
^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$
修复。
|
没有将括号括起来,所以它寻找^#FFFFFFF
或FFF$
。固定。
([0-9a-fA-F]{2}){3}
等于[0-9a-fA-F]{6}
?
如果您也想接受命名的颜色和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
所有答案都提到了RGB格式,这是ARGB格式的正则表达式:
^#[0-9a-fA-F]{8}$|#[0-9a-fA-F]{6}$|#[0-9a-fA-F]{4}$|#[0-9a-fA-F]{3}$
这应该与任何#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
,这不是有效的十六进制颜色。