Je recherche une expression régulière pour valider les couleurs hexadécimales dans ASP.NET C # et
cherche également du code pour la validation côté serveur.
Par exemple: #CCCCCC
^#(?:[0-9a-fA-F]{3}){1,2}$
Dissection:
^ anchor for start of string
# the literal #
( start of group
?: indicate a non-capturing group that doesn't generate backreferences
[0-9a-fA-F] hexadecimal digit
{3} three times
) end of group
{1,2} repeat either once or twice
$ anchor for end of string
Cela correspond à une valeur de couleur hexadécimale arbitraire pouvant être utilisée dans CSS, telle que #91bf4a
ou #f13
.
Remarque: Pas de prise en charge des valeurs de couleur hexadécimales RGBA, cependant.
Désaccord mineur avec l'autre solution. Je dirais
^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$
La raison en est que cela (correctement) capture les composants RVB individuels. L'autre expression est divisée en # 112233 en trois parties, '#' 112 233. La syntaxe est en fait '#' (RR GG BB) | (R G B)
Le léger inconvénient est que plus de recul est nécessaire. Lors de l'analyse de #CCC, vous ne savez pas que le second C est le composant vert tant que vous n'avez pas atteint la fin de la chaîne; lors de l'analyse de #CCCCCC, vous ne savez pas que le second C fait toujours partie de la composante rouge jusqu'à ce que vous voyiez le 4ème C.
Ceci si vous voulez accepter les couleurs nommées et rgb (a, b, c) aussi. Le "i" final est insensible à la casse.
Couleurs HTML (# 123, RGB non accepté)
/^(#[a-f0-9]{6}|black|green|silver|gray|olive|white|yellow|maroon|navy|red|blue|purple|teal|Fuchsia|aqua)$/i
Couleurs CSS (# 123, rgb accepté)
/^(#[a-f0-9]{6}|#[a-f0-9]{3}|rgb *\( *[0-9]{1,3}%? *, *[0-9]{1,3}%? *, *[0-9]{1,3}%? *\)|rgba *\( *[0-9]{1,3}%? *, *[0-9]{1,3}%? *, *[0-9]{1,3}%? *, *[0-9]{1,3}%? *\)|black|green|silver|gray|olive|white|yellow|maroon|navy|red|blue|purple|teal|Fuchsia|aqua)$/i
toutes les réponses mentionnées format RVB, voici regex pour le format ARGB:
^#[0-9a-fA-F]{8}$|#[0-9a-fA-F]{6}$|#[0-9a-fA-F]{4}$|#[0-9a-fA-F]{3}$
Basé sur la réponse de MSalters, mais en empêchant une correspondance incorrecte, ce qui suit fonctionne
^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$
Ou pour un symbole de hachage #
facultatif:
^#?(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$
Et sans les références arrières générées:
^#?(?:(?:[0-9a-fA-F]{2}){3}|(?:[0-9a-fA-F]){3})$
En Ruby, vous avez accès à la classe de caractères \h
(hexadécimale). Vous devez également vous occuper davantage des fins de ligne, d'où le \A...\z
au lieu du plus commun ^...$
.
/\A#(\h{3}){1,2}\z/
Cela correspondra à 3 ou 6 caractères hexadécimaux suivant un #. Donc pas de RGBA. Il est également insensible à la casse, même s'il n'a pas l'indicateur i
.
/ ^ # ([A-Fa-f0-9] {6}) $ /
Cette RegExp correspond à la chaîne commençant par #
et suivie du numéro 1 to 9 && a to z && A to Z
jusqu'à 6 char
Cela devrait correspondre à n'importe quelle syntaxe #rgb
, #rgba
, #rrggbb
et #rrggbbaa
:
/^#(?:(?:[\da-f]{3}){1,2}|(?:[\da-f]{4}){1,2})$/i
panne:
^ // start of line
# // literal pound sign, followed by
(?: // either:
(?: // a non-capturing group of:
[\da-f]{3} // exactly 3 of: a single digit or a letter 'a'–'f'
){1,2} // repeated exactly 1 or 2 times
| // or:
(?: // a non-capturing group of:
[\da-f]{4} // exactly 4 of: a single digit or a letter 'a'–'f'
){1,2} // repeated exactly 1 or 2 times
)
$ // end of line
i // ignore case (let 'A'–'F' match 'a'–'f')
Notez que ce qui précède est pas équivalent à cette syntaxe, qui est incorrecte:
/^#(?:[\da-f]{3,4}){1,2}$/i
Cela autoriserait un groupe de 3 suivi d'un groupe de 4, tel que #1234567
, qui n'est pas une couleur hexadécimale valide.