Самая большая проблема, которую Вы собираетесь иметь, будет заставлять его работать через браузеры.
я думаю, что необходимо сильно рассмотреть, нужен ли Вам действительно он... Google получает много удара для маркера путем создания чего-то вроде этого из-за огромного количества кнопок и языков, в которых они нуждаются; я подозреваю, что большинство сайтов и приложений были бы так же, как богатый, использующий изображение.
компонент с открытым исходным кодом является хорошей идеей, хотя: распространите богатство и усилие широко.
^#(?:[0-9a-fA-F]{3}){1,2}$
Dissection:
^ 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.