如何识别给定的string是hex颜色格式

我正在寻找一个正则expression式来validation在ASP.NET C#和hex颜色
我也在寻找代码在服务器端进行validation。

例如: #CCCCCC

 ^#(?:[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中使用的任意hex颜色值,如#91bf4a#f13

注意:不支持RGBAhex颜色值。

对另一个解决scheme稍有不同意见。 我会说

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

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

略有缺点是需要更多的回溯。 parsing#CCC时,你不知道第二个C是绿色的组件,直到你击中string的末尾; 当parsing#CCCCCC时,你不知道第二个C仍然是红色组件的一部分,直到你看到第4个C

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

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 

基于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})$