Par exemple:
AA33FF
= couleur hexadécimale valide
Z34FF9
= couleur hexadécimale invalide (contient Z)
AA33FF11
= couleur hexadécimale non valide (contient des caractères supplémentaires)
javascript
jquery
colors
Alex
la source
la source
AARRGGBB
format alpha .Réponses:
Élaborer:
^ ->
match commençant# ->
un hachage[0-9A-F] ->
tout entier de 0 à 9 et toute lettre de A à F{6} ->
le groupe précédent apparaît exactement 6 fois$ ->
match endi ->
ignorer la casseSi vous avez besoin de la prise en charge des codes HEX à 3 caractères, utilisez ce qui suit:
La seule différence ici est que
est remplacé par
Cela signifie qu'au lieu de correspondre exactement à 6 caractères, il correspondra exactement à 3 caractères, mais 1 ou 2 fois. Permettre
ABC
etAABBCC
, mais pasABCD
la source
color: #f00;
sera également interprété comme rouge (# ff0000)./^#[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test("#f00")
/^#([0-9a-f]{3}){1,2}$/i
au mélange./^#[0-9A-F]{3,6}$/i.test('#aabb')
passe également, mais#aabb
n'est pas une couleur hexadécimale valide.Cette réponse avait l'habitude de lancer de faux positifs car au lieu de
Number('0x' + hex)
cela, elle était utiliséeparseInt(hex, 16)
.parseInt()
analysera depuis le début de la chaîne jusqu'à ce qu'elle atteigne un caractère qui n'est pas inclus dans la racine (16
). Cela signifie qu'il pourrait analyser des chaînes comme «AAXXCC», car il commence par «AA».Number()
, d'autre part, analysera uniquement si la chaîne entière correspond à la base. Maintenant,Number()
ne prend pas de paramètre de base, mais heureusement, vous pouvez préfixer des littéraux numériques pour obtenir un nombre dans d'autres rayons.Voici un tableau pour clarification:
la source
parseInt
prendra"abcZab"
, trouve que"Z"
c'est invalide (pour radix 16), et ignorez-le et tout ce qui suit. Il prend ensuite le début"abc"
et le convertit en2748
(ce qui est également le résultat deparseInt("abcZab", 16)
, prouvant que c'est la logique qui se passe). Comme son nom l'indique,parseInt
analyse une chaîne. Tout comme si vous analysiez un nombre avec des unités dessus avec une base de 10, commeparseInt("10px", 10)
, vous obtiendrez10
. Vous pouvez le voir décrit ici: es5.github.io/#x15.1.2.2 (étape 11)Cela peut être un problème compliqué. Après plusieurs tentatives, j'ai trouvé une solution assez propre. Laissez le navigateur faire le travail pour vous.
Étape 1: Créez un div avec le style de bordure défini sur aucun. Le div peut être positionné hors de l'écran ou il peut s'agir de n'importe quel div de votre page qui n'utilise pas les bordures.
Étape 2: définissez la couleur de la bordure sur une chaîne vide. Le code pourrait ressembler à ceci:
Étape 3: définissez la couleur de la bordure sur la couleur dont vous n'êtes pas sûr.
Étape 4: Vérifiez si la couleur a réellement changé. Si testcol n'est pas valide, aucun changement ne se produira.
Étape 5: Nettoyez après vous en redéfinissant la couleur sur une chaîne vide.
La Div:
Maintenant, la fonction JavaScript:
Dans ce cas, la fonction renvoie une réponse vrai / faux à la question, l'autre option est de lui faire renvoyer une valeur de couleur valide. Votre valeur de couleur d'origine, la valeur de borderColor ou une chaîne vide à la place de couleurs non valides.
la source
Si vous essayez de l'utiliser en HTML, essayez d'utiliser ce modèle directement:
comme
Il donnera une validation pour correspondre au format demandé.
la source
https://gist.github.com/dustinpoissant/22ce25c9e536bb2c5a2a363601ba261c
Remarque: cela nécessite jQuery
Cela fonctionne pour TOUS les types de couleurs et pas seulement pour les valeurs hexadécimales. Il n'ajoute pas non plus d' éléments inutiles à l'arborescence DOM.
la source
Si vous avez besoin d'une fonction pour vous dire si une couleur est valide, vous pouvez aussi bien qu'elle vous donne quelque chose d'utile - les valeurs calculées de cette couleur - et renvoie null quand ce n'est pas une couleur valide. Voici mon essai sur une fonction compatible (Chrome54 et MSIE11) pour obtenir les valeurs RGBA d'une "couleur" dans l'un des formats - que ce soit 'vert', '#FFF', ou '# 89abcd' ou 'rgb (0,0,128) »ou« rgba (0, 128, 255, 0,5) ».
la source
Ajoutez une vérification de longueur pour vous assurer que vous n'obtenez pas un faux positif
}
la source