web-dev-qa-db-ja.com

特定の文字列を識別する方法は16進カラー形式です

ASP.NET C#で16進数の色を検証するための正規表現を探しています。
サーバー側の検証用コードも探しています。

例えば: #CCCCCC

66
Avinash
^#(?:[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進カラー値はサポートされていません。

136
Joey

他のソリューションとのわずかな不一致。私は言うだろう

^#(([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がまだ赤いコンポーネントの一部であることを知りません。

16
MSalters

これは、名前付きの色と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
4
FrancescoMM

すべての回答はRGB形式に言及しましたが、ARGB形式の正規表現は次のとおりです:

^#[0-9a-fA-F]{8}$|#[0-9a-fA-F]{6}$|#[0-9a-fA-F]{4}$|#[0-9a-fA-F]{3}$
3
SamiAzar

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})$
2
Chris

Ruby

Rubyでは、\h(16進数)文字クラスにアクセスできます。また、行末に注意する必要があるため、より一般的な\A...\zの代わりに^...$を使用します

/\A#(\h{3}){1,2}\z/

これは、#に続く3つまたは6つの16進文字に一致します。 RGBAはありません。 iフラグがなくても、大文字と小文字は区別されません。

1
aidan

/ ^#([A-Fa-f0-9] {6})$ /

このRegExpは、#で始まり1 to 9 && a to z && A to Zから6 charまでの数字が続く文字列と一致します。

0
Chawki

これは、#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進数の色ではありません。

0
chharvey