Как идентифицировать данную строку в шестнадцатеричном формате - PullRequest
61 голосов
/ 28 октября 2009

Я ищу регулярное выражение для проверки шестнадцатеричных цветов в ASP.NET C # и
также ищу код для проверки на стороне сервера.

Например: #CCCCCC

Ответы [ 8 ]

131 голосов
/ 28 октября 2009
^#(?:[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 отсутствует.

16 голосов
/ 28 октября 2009

Незначительное несогласие с другим решением. Я бы сказал

^#(([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 все еще является частью красного компонента, пока не увидите 4-й C.

3 голосов
/ 16 октября 2018

все ответы упомянуты в формате RGB, вот регулярное выражение для формата ARGB:

^#[0-9a-fA-F]{8}$|#[0-9a-fA-F]{6}$|#[0-9a-fA-F]{4}$|#[0-9a-fA-F]{3}$
3 голосов
/ 29 ноября 2012

Это если вы хотите принять именованные цвета и 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
2 голосов
/ 10 октября 2013

На основании ответа 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})$
0 голосов
/ 16 февраля 2019

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

Этот RegExp соответствует строке, которая начинается с # и следует по номеру от 1 to 9 && a to f && A to F до 6 char

0 голосов
/ 20 ноября 2018

рубин

В Ruby у вас есть доступ к классу символов \h (шестнадцатеричный). Вы также должны больше заботиться об окончаниях строк, поэтому \A...\z вместо более распространенного ^...$

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

Это будет соответствовать 3 или 6 шестнадцатеричным символам после #. Так что нет RGBA. Он также нечувствителен к регистру, несмотря на отсутствие флага i.

0 голосов
/ 16 ноября 2018

Это должно соответствовать любому синтаксису #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, которая не является допустимым шестнадцатеричным цветом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...