Я ищу регулярное выражение для проверки шестигранных цветов в ASP.NET С# и
Я также смотрю код для проверки на стороне сервера.
Например: #CCCCCC
Я ищу регулярное выражение для проверки шестигранных цветов в ASP.NET С# и
Я также смотрю код для проверки на стороне сервера.
Например: #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, например #91bf4a
или #f13
.
Примечание. Однако поддержка шестнадцатеричных значений цвета RGBA отсутствует.
Незначительное несогласие с другим решением. Я бы сказал,
^#(([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.
Это, если вы хотите принять именованные цвета и 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})$
Это должно соответствовать любому #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
, которая не является допустимым шестнадцатеричным цветом.
В Ruby у вас есть доступ к классу символов \h
(шестнадцатеричный). Вы также должны больше заботиться об окончаниях строк, поэтому \A...\z
вместо более распространенных ^...$
/\A#(\h{3}){1,2}\z/
Это будет соответствовать 3 или 6 шестнадцатеричным символам после #. Так что нет RGBA. Он также не учитывает регистр, несмотря на отсутствие флага i
.
/^ # ([A-Fa-f0-9] {6}) $/
Этот RegExp соответствует строке, которая начинается с #
и следует от 1 to 9 && a to f && A to F
до 6 char