Например:
AA33FF
= допустимый шестнадцатеричный цвет
Z34FF9
= неверный шестнадцатеричный цвет (в нем есть Z)
AA33FF11
= неверный шестнадцатеричный цвет (есть лишние символы)
javascript
jquery
colors
Alex
источник
источник
AARRGGBB
формате.Ответы:
Чтобы уточнить:
^ ->
соответствует началу# ->
хеша[0-9A-F] ->
любое целое число от 0 до 9 и любая буква от A до F{6} ->
предыдущая группа появляется ровно 6 раз$ ->
соответствует концуi ->
игнорировать регистрЕсли вам нужна поддержка трехзначных HEX-кодов, используйте следующее:
Единственная разница здесь в том, что
заменяется на
Это означает, что вместо совпадения ровно 6 символов он будет соответствовать ровно 3 символам, но 1 или 2 раза. Разрешить
ABC
иAABBCC
, но неABCD
источник
color: #f00;
также будет интерпретироваться как красный (# ff0000)./^#[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test("#f00")
/^#([0-9a-f]{3}){1,2}$/i
в смесь./^#[0-9A-F]{3,6}$/i.test('#aabb')
также проходит, но#aabb
не является допустимым шестнадцатеричным цветом.Этот ответ обычно выдавал ложные срабатывания, потому что вместо
Number('0x' + hex)
него он использовалparseInt(hex, 16)
.parseInt()
будет анализировать от начала строки до тех пор, пока не достигнет символа, не включенного в radix (16
). Это означает, что он может анализировать такие строки, как «AAXXCC», потому что он начинается с «AA».Number()
, с другой стороны, будет выполняться синтаксический анализ только в том случае, если вся строка соответствует основанию системы счисления. ТеперьNumber()
не принимает параметр radix, но, к счастью, вы можете префикс числовых литералов, чтобы получить число в других радиусах.Вот таблица для пояснения:
источник
parseInt
будет принимать"abcZab"
, находить"Z"
недопустимое (для системы счисления 16) и игнорировать это и все, что после него. Затем он берет начало"abc"
и преобразует его в2748
(что также является результатомparseInt("abcZab", 16)
доказательства того, что логика происходит). Как следует из названия,parseInt
анализирует строку. Точно так же, как если бы вы разбирали число с единицами измерения с основанием 10parseInt("10px", 10)
, вы бы получили10
. Вы можете увидеть его описание здесь: es5.github.io/#x15.1.2.2 (шаг 11)Это может быть сложной проблемой. После нескольких попыток я нашел довольно чистое решение. Позвольте браузеру делать всю работу за вас.
Шаг 1. Создайте div с параметром «Нет» для стиля границы. Div может быть расположен за экраном или это может быть любой div на вашей странице, который не использует границы.
Шаг 2: Установите цвет границы на пустую строку. Код может выглядеть примерно так:
Шаг 3: Установите цвет границы на цвет, в котором вы не уверены.
Шаг 4. Проверьте, действительно ли изменился цвет. Если testcol недействителен, никаких изменений не произойдет.
Шаг 5: Очистите себя, вернув цвет к пустой строке.
Див:
Теперь функция JavaScript:
В этом случае функция возвращает истинный / ложный ответ на вопрос, другой вариант - вернуть действительное значение цвета. Ваше исходное значение цвета, значение из borderColor или пустая строка вместо недопустимых цветов.
источник
Если вы пытаетесь использовать его в HTML, попробуйте использовать этот шаблон напрямую:
лайк
Это даст подтверждение на соответствие запрошенному формату.
источник
https://gist.github.com/dustinpoissant/22ce25c9e536bb2c5a2a363601ba261c
Примечание: для этого требуется jQuery
Это работает для ВСЕХ типов цвета, а не только для шестнадцатеричных значений. Он также не добавляет ненужные элементы в дерево DOM.
источник
Если вам нужна функция, которая сообщает вам, допустим ли цвет, вы также можете попросить ее дать вам что-то полезное - вычисленные значения этого цвета - и вернуть null, если это недопустимый цвет. Вот мой удар по совместимой (Chrome54 и MSIE11) функции для получения значений RGBA «цвета» в любом из форматов - будь то «зеленый», «#FFF», «# 89abcd» или «rgb». (0,0,128) 'или' rgba (0, 128, 255, 0,5) '.
источник
Добавьте проверку длины, чтобы убедиться, что вы не получите ложное срабатывание
}
источник