Подтвердить что ты не робот

Как определить заданную строку - это формат шестнадцатеричного цвета

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

Например: #CCCCCC

4b9b3361

Ответ 1

^#(?:[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 отсутствует.

Ответ 2

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

^#(([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

Это, если вы хотите принять именованные цвета и 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

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

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

Ответ 5

Основываясь на ответе 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})$

Ответ 6

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

Ответ 7

Рубин

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

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

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

Ответ 8

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

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