Я шукаю регулярний вираз для перевірки шістнадцяткових кольорів у ASP.NET C #, а
також шукаю код для перевірки на стороні сервера.
Наприклад: #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) | (RGB)
Незначним недоліком є необхідність більш зворотного відстеження. При синтаксичному аналізі #CCC ви не знаєте, що другий C є зеленим компонентом, поки ви не потрапите в кінець рядка; при синтаксичному аналізі #CCCCCC ви не знаєте, що друга C все ще є частиною червоного компонента, поки не побачите 4-ю C.
#([1-9a-fA-F]{3}|[1-9a-fA-F]{6}). Якщо ви хочете зафіксувати окремі кольорові компоненти, він стає більш складним (ваша пропозиція цього теж не робить).
^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$це виправлено.
|не було поставлено в дужки, тому воно шукало ^#FFFFFFFабо FFF$. Виправлено.
([0-9a-fA-F]{2}){3}еквівалентно [0-9a-fA-F]{6}?
Це, якщо ви також хочете прийняти названі кольори та 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
На основі відповіді 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(шістнадцяткового) класу символів. Вам також слід більше подбати про закінчення рядків, отже, \A...\zзамість більш загальних^...$
/\A#(\h{3}){1,2}\z/
Це буде відповідати 3 або 6 шістнадцятковим символам після #. Тож немає RGBA. Він також не враховує регістр, незважаючи на відсутність iпрапора.
/\H/які відповідають символом не гекс, так що ви просто повинні заперечувати логічне значення (0 Літери не гекс знайдений регулярним виразом: це дійсно номер гекса) наприклад: !"FF000"[/\H/] # true,!"hello"[/\H/] # false
Це повинно відповідати будь-якому #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, що не є дійсним шестигранним кольором.