web-dev-qa-db-fra.com

Comment identifier une chaîne donnée est un format de couleur hexadécimale

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

57
Avinash
^#(?:[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.

124
Joey

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.

14
MSalters

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
3
FrancescoMM

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}$
3
M.SamiAzar

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})$
2
Chris

Rubis

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.

0
aidan

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

0
Chawki

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.

0
chharvey