Comment identifier une chaîne donnée est le format couleur hexadécimal

Je recherche une expression régulière pour valider les couleurs hexadécimales dans ASP.NET C # et
Je 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 ssortingng # 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 ssortingng 

Cela correspondra à une valeur de couleur hexadécimale arbitraire pouvant être utilisée dans CSS, telle que #91bf4a ou #f13 .

Remarque: Aucune prise en charge des valeurs de couleur hexadécimale 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 ceci (correctement) capture les composants RVB individuels. L’autre expression a cassé # 112233 en trois parties, “#” 112 233. La syntaxe est en fait “#” (RR GG BB) | (RVB)

Le léger inconvénient est qu’un retour en arrière est nécessaire. Lors de l’parsing #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’parsing #CCCCCC, vous ne savez pas que le second C fait toujours partie du composant 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 dernier “i” est insensible à la casse.

Couleurs HTML (# 123, rgb non acceptées)

 /^(#[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 

Basé sur la réponse de MSalters, mais empêchant une correspondance incorrecte, les travaux suivants

 ^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$ 

Ou pour un symbole facultatif de hachage # :

 ^#?(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$ 

Et sans générer de références en retour:

 ^#?(?:(?:[0-9a-fA-F]{2}){3}|(?:[0-9a-fA-F]){3})$