Por exemplo:
AA33FF
= cor hexadecimal válida
Z34FF9
= cor hexadecimal inválida (contém Z)
AA33FF11
= cor hexadecimal inválida (possui caracteres extras)
javascript
jquery
colors
Alex
fonte
fonte
AARRGGBB
formato.Respostas:
Para elaborar:
^ ->
corresponde ao início de# ->
um hash[0-9A-F] ->
qualquer inteiro de 0 a 9 e qualquer letra de A a F{6} ->
o grupo anterior aparece exatamente 6 vezes$ ->
corresponde ao fimi ->
ignora maiúsculasSe você precisar de suporte para códigos HEX de 3 caracteres, use o seguinte:
A única diferença aqui é que
é substituído por
Isso significa que em vez de corresponder a exatamente 6 caracteres, ele corresponderá a exatamente 3 caracteres, mas 1 ou 2 vezes. Permitindo
ABC
eAABBCC
, mas nãoABCD
fonte
color: #f00;
será interpretado como vermelho (# ff0000) também./^#[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test("#f00")
/^#([0-9a-f]{3}){1,2}$/i
à mistura./^#[0-9A-F]{3,6}$/i.test('#aabb')
também passa, mas#aabb
não é uma cor hexadecimal válida.Essa resposta costumava lançar falsos positivos porque, em vez de
Number('0x' + hex)
, costumavaparseInt(hex, 16)
.parseInt()
irá analisar desde o início da string até chegar a um caractere que não está incluído na raiz (16
). Isso significa que ele pode analisar strings como 'AAXXCC', porque começa com 'AA'.Number()
, por outro lado, só analisará se toda a string corresponder à raiz. Agora,Number()
não leva um parâmetro de raiz, mas felizmente, você pode prefixar literais de número para obter um número em outros raios.Aqui está uma tabela para esclarecimento:
fonte
parseInt
tomará"abcZab"
, descubra que"Z"
é inválido (para o radical 16), e ignore-o e qualquer coisa depois dele. Em seguida, pega o início"abc"
e o converte em2748
(que também é o resultado deparseInt("abcZab", 16)
provar que essa é a lógica acontecendo). Como o nome indica,parseInt
analisa uma string. Exatamente como se você estivesse analisando um número com unidades com uma raiz de 10, comoparseInt("10px", 10)
, você obteria10
. Você pode vê-lo descrito aqui: es5.github.io/#x15.1.2.2 (etapa 11)Isso pode ser um problema complicado. Após várias tentativas, encontrei uma solução bastante limpa. Deixe o navegador fazer o trabalho por você.
Etapa 1: crie um div com o estilo de borda definido como nenhum. O div pode ser posicionado fora da tela ou pode ser qualquer div em sua página que não use as bordas.
Etapa 2: defina a cor da borda como uma string vazia. O código pode ser parecido com este:
Etapa 3: defina a cor da borda com a cor da qual você não tem certeza.
Etapa 4: verifique se a cor realmente mudou. Se testcol for inválido, nenhuma alteração ocorrerá.
Etapa 5: limpe depois de definir a cor de volta para uma string vazia.
O Div:
Agora, a função JavaScript:
Nesse caso, a função está retornando uma resposta verdadeira / falsa para a pergunta, a outra opção é fazer com que ela retorne um valor de cor válido. O valor da cor original, o valor de borderColor ou uma string vazia no lugar de cores inválidas.
fonte
Se você estiver tentando usá-lo em HTML, tente usar este padrão diretamente:
gostar
Isso dará uma validação para corresponder ao formato solicitado.
fonte
https://gist.github.com/dustinpoissant/22ce25c9e536bb2c5a2a363601ba261c
Nota: Isso requer jQuery
Isso funciona para TODOS os tipos de cores, não apenas para valores hexadecimais. Também não anexa elementos desnecessários à árvore DOM.
fonte
Se você precisa de uma função para dizer se uma cor é válida, você também pode fazer com que ela forneça algo útil - os valores calculados dessa cor - e retornar nulo quando não for uma cor válida. Aqui está minha tentativa de obter uma função compatível (Chrome54 e MSIE11) para obter os valores RGBA de uma "cor" em qualquer um dos formatos - seja 'verde', ou '#FFF', ou '# 89abcd' ou 'rgb (0,0,128) ', ou' rgba (0, 128, 255, 0,5) '.
fonte
Adicione uma verificação de comprimento para garantir que você não obtenha um falso positivo
}
fonte