regex en javascript pour correspondre à la fois RVB ou RVBA
Actuellement, j'ai cette expression qui correspond à une RVB chaîne. J'ai besoin d'elle améliorée de sorte qu'il est suffisamment robuste pour faire correspondre les couleurs RVB ou RVBA.
rgbRegex = /^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/; //matches RGB
var rgbString = "rgb(0, 70, 255)";
var RGBAString = "rgba(0, 70, 255, 0.5)";
var rgbRegex = /^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/;
//need help on this regex
//I figure it needs to be ^rgba?, and then also an optional clause to handle the opacity
var partsRGB = rgbString.match(rgbRegex);
var partsRGBA = RGBAString.match(rgbRegex);
console.log(partsRGB); //["rgb(0, 70, 255)", "0", "70", "255"]
console.log(partsRGBA); //null. I want ["rgb(0, 70, 255, 0.5)", "0", "70", "255", "0.5"]
stackoverflow.com/questions/638948/...
Qui va avoir beaucoup de faux négatifs. Les espaces sont autorisés avant les virgules et les valeurs en pourcentage sont autorisés au lieu de décimales.
Qui va avoir beaucoup de faux négatifs. Les espaces sont autorisés avant les virgules et les valeurs en pourcentage sont autorisés au lieu de décimales.
OriginalL'auteur fortuneRice | 2011-09-25
Vous devez vous connecter pour publier un commentaire.
Cela fera?
rgb(0,0,0, 0.5);
valable - qui est pas valide rgb couleur.OriginalL'auteur Rusty Fausak
Il n'est pas si simple - rvb est illégal, avec un quatrième paramètre.
Vous avez également besoin de permettre pour le pourcentage de décimales ainsi que des valeurs entières
pour les valeurs rvb. Et les espaces sont autorisés presque n'importe où.
//test de:
OriginalL'auteur kennebec
J'ai fait une regex qui vérifie rgb() et rgba() les valeurs. Il vérifie les 3 tuples de 0 à 255 et puis option d'un nombre décimal entre 0 et 1 pour la transparence. TLDR;
Décomposer en différentes parties, nous avons:
0-255 est en correspondance avec l'alternance de:
La manipulation de la virgule et l'espace autour de la 0-255 tuples prend de la place. J'match 0-255 tuples avec l'obligation de virgule et en option des espaces deux fois
Puis un 0-255 tuple avec en option une virgule et un espace pour les rgb() les valeurs sans la virgule
Puis vient une option de 0-1 en tant que nombre entier ou un nombre décimal:
Et on finit avec un crochet de fermeture
25[0-5]
= faire correspondre les numéros de 250 à 255.2[0-4]\d
= faire Correspondre les numéros de 200 à 249.1\d\d
= correspondent à des nombres de 100 à 199.\d\d?
= match de n'importe quel nombre de 0 à 99 (le?
fait le deuxième chiffre facultatif). La façon dont vous l'avez expliqué, il est faux:25[0-5] // If tripple digit starting with 25 then last number must be 0
est incorrecte est donc2[0-4]\d // If tripple digit starting with 2, second digit must be 0-5
une description incomplète. 😉Pour ajouter,
,\s?
est insuffisante.rgb/a
peut avoir autant de cases que vous le souhaitez avant la virgule et après la virgule, donc\s*,\s*
serait la bonne façon.Mise à jour de répondre à vos améliorations @RokoC.Buljan. Moyen beaucoup plus facile pour expliquer le nombre de correspondance:)
OriginalL'auteur Pistus
Si vous avez besoin d'être strict, c'est à dire la règle rvb(0, 70, 255, 0.5), vous avez besoin de fusionner les deux cas avec | :
http://jsfiddle.net/YxU2m/2/
OriginalL'auteur mihai
- je utiliser cette il ya de l'aide
si vous cochez
rgba(102,51,68,0.6)
il sera de retour
et si vous vérifiez
rgb(102,51,68)
il sera de retour
Démo
cela permettra rgb(0,0,0,0)
Oui, il permettra rgb(0,0,0) de couleur noire
droit, mais il permet également rgba(0,0,0,0) qui n'est pas valide chaîne de couleur
OriginalL'auteur vipmaa
Cette regex est un bon compromis entre la complexité de la regex et le nombre de cas d'utilisation couvert.
rvb ou rvba doivent être traités différemment que l'on doit le 4ème argument et qu'on n'a pas.
Cette expression prend ça en compte. Il traite également de:
Cette expression ne prend pas en compte:
OriginalL'auteur Votemike