ASP.NET C#で16進数の色を検証するための正規表現を探しています。
サーバー側の検証用コードも探しています。
例えば: #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
これは、#91bf4a
や#f13
など、CSSで使用できる任意の16進数の色の値と一致します。
注:ただし、RGBA 16進カラー値はサポートされていません。
他のソリューションとのわずかな不一致。私は言うだろう
^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$
理由は、これが個々のRGBコンポーネントを(正しく)キャプチャするためです。もう1つの式は#112233を3つの部分に分割しました。 '#' 112233。構文は実際には '#'です(RR GG BB)|(R G B)
わずかな欠点は、より多くのバックトラッキングが必要なことです。 #CCCを解析するとき、文字列の最後に到達するまで2番目のCが緑のコンポーネントであることはわかりません。 #CCCCCCを解析するとき、4番目のCが表示されるまで、2番目のCがまだ赤いコンポーネントの一部であることを知りません。
これは、名前付きの色と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}$
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})$
Rubyでは、\h
(16進数)文字クラスにアクセスできます。また、行末に注意する必要があるため、より一般的な\A...\z
の代わりに^...$
を使用します
/\A#(\h{3}){1,2}\z/
これは、#に続く3つまたは6つの16進文字に一致します。 RGBAはありません。 i
フラグがなくても、大文字と小文字は区別されません。
/ ^#([A-Fa-f0-9] {6})$ /
このRegExpは、#
で始まり1 to 9 && a to z && A to Z
から6 char
までの数字が続く文字列と一致します。
これは、#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')
上記はnotこの構文と同等であり、正しくないことに注意してください。
/^#(?:[\da-f]{3,4}){1,2}$/i
これにより、3つのグループに続いて#1234567
などの4つのグループが許可されますが、これは有効な16進数の色ではありません。