Por ejemplo:
AA33FF
= color hexadecimal válido
Z34FF9
= color hexadecimal no válido (tiene Z)
AA33FF11
= color hexadecimal no válido (tiene caracteres adicionales)
javascript
jquery
colors
Alex
fuente
fuente
AARRGGBB
formato.Respuestas:
Elaborar:
^ ->
coincide con el comienzo de# ->
un hash[0-9A-F] ->
cualquier número entero de 0 a 9 y cualquier letra de la A a la F,{6} ->
el grupo anterior aparece exactamente 6 veces$ ->
coincide con el finali ->
ignora el casoSi necesita soporte para códigos HEX de 3 caracteres, use lo siguiente:
La única diferencia aquí es que
es reemplazado por
Esto significa que en lugar de coincidir exactamente con 6 caracteres, coincidirá exactamente con 3 caracteres, pero 1 o 2 veces. Permitiendo
ABC
yAABBCC
, pero noABCD
fuente
color: #f00;
también se interpretará como rojo (# ff0000)./^#[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test("#f00")
/^#([0-9a-f]{3}){1,2}$/i
a la mezcla./^#[0-9A-F]{3,6}$/i.test('#aabb')
también pasa, pero#aabb
no es un color hexadecimal válido.Esta respuesta solía arrojar falsos positivos porque en lugar de
Number('0x' + hex)
, usabaparseInt(hex, 16)
.parseInt()
analizará desde el principio de la cadena hasta que alcance un carácter que no esté incluido en la base (16
). Esto significa que podría analizar cadenas como 'AAXXCC', porque comienza con 'AA'.Number()
, por otro lado, solo analizará si toda la cadena coincide con la base. Ahora,Number()
no toma un parámetro de radix, pero afortunadamente, puede prefijar literales de números para obtener un número en otros radios.Aquí hay una tabla para aclarar:
fuente
parseInt
tomará"abcZab"
, encontrará que"Z"
no es válido (para la base 16) e ignórelo y cualquier cosa después de él. Luego toma el principio"abc"
y lo convierte en2748
(que también es el resultado deparseInt("abcZab", 16)
, demostrando que esa es la lógica). Como su nombre lo indica,parseInt
analiza una cadena. Al igual que si estuvieras analizando un número con unidades con una base de 10,parseInt("10px", 10)
obtendrías10
. Puede verlo descrito aquí: es5.github.io/#x15.1.2.2 (paso 11)Este puede ser un problema complicado. Después de varios intentos, se me ocurrió una solución bastante limpia. Deje que el buscador haga el trabajo por usted.
Paso 1: crea un div con el estilo de borde establecido en ninguno. El div se puede colocar fuera de la pantalla o puede ser cualquier div en su página que no use los bordes.
Paso 2: establece el color del borde en una cadena vacía. El código podría verse así:
Paso 3: establece el color del borde en el color del que no estás seguro.
Paso 4: Verifique si el color realmente cambió. Si testcol no es válido, no se producirá ningún cambio.
Paso 5: Limpia después de ti mismo estableciendo el color nuevamente en una cuerda vacía.
La Div:
Ahora la función de JavaScript:
En este caso, la función devuelve una respuesta de verdadero / falso a la pregunta, la otra opción es que devuelva un valor de color válido. Su valor de color original, el valor de borderColor o una cadena vacía en lugar de colores no válidos.
fuente
Si está intentando usarlo en HTML, intente usar este patrón directamente:
me gusta
Dará una validación para que coincida con el formato solicitado.
fuente
https://gist.github.com/dustinpoissant/22ce25c9e536bb2c5a2a363601ba261c
Nota: esto requiere jQuery
Esto funciona para TODOS los tipos de color, no solo para valores hexadecimales. Tampoco no anexar elementos innecesarios al árbol DOM.
fuente
Si necesita una función que le diga si un color es válido, también puede hacer que le brinde algo útil (los valores calculados de ese color) y devuelva nulo cuando no es un color válido. Aquí está mi prueba de una función compatible (Chrome54 y MSIE11) para obtener los valores RGBA de un "color" en cualquiera de los formatos, ya sea 'verde', '#FFF', '# 89abcd' o 'rgb (0,0,128) 'o' rgba (0, 128, 255, 0.5) '.
fuente
Agregue una verificación de longitud para asegurarse de que no obtenga un falso positivo
}
fuente