Expression régulière nommée PATTERN_VALID_COLOR

'/^(?>#(?>[\da-f]{3}){1,2}|Sorry, but you did not specify a color for highlighting!Sorry, but you did not specify a color for highlighting!Sorry, but you did not specify a color for highlighting!Sorry, but you did not specify a color for highlighting!Sorry, but you did not specify a color for highlighting!Sorry, but you did not specify a color for highlighting!Sorry, but you did not specify a color for highlighting!Sorry, but you did not specify a color for highlighting!Sorry, but you did not specify a color for highlighting!Sorry, but you did not specify a color for highlighting!Sorry, but you did not specify a color for highlighting!Sorry, but you did not specify a color for highlighting!Sorry, but you did not specify a color for highlighting!Sorry, but you did not specify a color for highlighting!Sorry, but you did not specify a color for highlighting!Sorry, but you did not specify a color for highlighting!(Sorry, but you did not specify a color for highlighting!Sorry, but you did not specify a color for highlighting!%)Sorry, but you did not specify a color for highlighting!Sorry, but you did not specify a color for highlighting!Sorry, but you did not specify a color for highlighting!)$/i'
En langage humain, ce masque est utilisé pour valider un syntaxe de couleur correspondant à l'un des cas suivant:
où :

Explication du masque

Ce masque se divise en deux parties, la première partie qui teste les syntaxe #rgb se trouve à gauche du caractère |, et la seconde à sa droite.

La syntaxe #rgb

En simplifiant le masque pour faciliter la compréhension, on a #([\da-f]{3}){1,2}
La classe de caractère [\da-f] spécifie un caractère hexadécimal.
Le quantifieur {3} recherche un occurrence de 3 caractères hexadécimaux, et le sous-masque ([\da-f]{3}) représente donc une suite de 3 caractères hexadécimaux.
Le quantifieur {1,2} répète ce sous-masque une ou deux fois, et on peut donc valider une suite de 3 ou 6 caractères hexadécimaux.
Enfin, il faut que ces 3 ou 6 caractères soient précédés de #

La syntaxe rgb()

Cette partie du masque commence par rgb\(\s* et se termine par \). La chaîne à valider doit commencer par rgb( et se terminer par ). Remarquer qu'il ne doit pas y avoir de caractères blancs entre le b et la parenthèse ouvrante, mais qu'une séquence de 0 ou 1 ou plusieurs caractères blancs peut se trouver après la parenthèse ouvrante.
Maintenant, voyons ce qui se trouve entre ces parenthèses: pour cela nous analyserons le sous-masque suivant:
\d+((?>\.\d*)?%)?\s*(?>,\s*\d+(?(1)(\.\d*)?%)\s*){2}
  1. \d+: 1 ou plusieurs caractères décimaux.
  1. (?>\.\d*)?%:
    1. La séquence Sorry, but you did not specify a color for highlighting! sert à empêcher que la parenthèse soit capturant, pour l'instant, nous l'ignorerons.
    1. \.\d*: Le caractère . (un et un seul, remarquez l'absence de quantifieur) suivi éventuellement d'une suite de caractères décimaux.
    1. Le sous-masque est suivi du quantifieur ? et du caractère %. Le quantifieur signifie que ce sous-masque est optionnel (? = {0,1} = zéro ou un). Mais si le caractère . a été trouvé dans la chaîne, le signe % est requis, puisque ce caractère n'est pas suivi d'un quantifieur.
  1. ((?>\.\d*)?%)?: Le sous-masque vu en b) est optionnel. Notez que cette parenthèse externe est la seule dans le masque entier à être capturant, et si cette parenthèse a capturé, cela signifie en d'autres termes que le caractère % a été rencontré dans la chaîne. Nous verrons cela plus tard.
  1. \s*: Des caractères blancs optionnels. Jusqu'ici donc, ce qu'on peut rencontrer à l'intérieur de la parenthèse du syntaxe rgb() est une suite de caractères décimaux, éventuellement suivi d'un point et d'autres caractères décimaux, ou d'un point tout court, et du signe %. Si le caractère point a été trouvé dans la chaîne, le caractère % est requis. Mais inversement, le caractère % peut être rencontré même si le nombre ne contenait pas de "." Autrement dit, on peut avoir un nombre entier ou réel, suivi , -- éventuellement s'il s'agit d'un nombre entier, obligatoirement s'il s'agit d'un nombre réel -- du caractère %.
  1. (?>,\s*\d+...){2} : Voyons maintenant cette partie, colorée en vert dans le masque ci-haut. On a le caractère virgule (,), suivi de 0, 1 ou plusieurs caractères blancs (\s*) et ensuite de 1 ou plusieurs chiffres décimaux (\d+). Tout cela, avec le reste du sous-masque est répétée deux fois (){2}).
  1. Le reste du masque qui n'a pas été expliquée est (?(1)(\.\d*)?%)
    1. (?(1)...): c'est un sous-masque conditionnel. Si la première parenthèse capturant a été vérifiée (voir c-), considérer dans le masque ce qui se trouve avant la parenthèse fermante de ce sous-masque conditionnel, c'est-à-dire (\.\d*)?%. Autrement dit, si le premier nombre était suivi du signe %, les deux autres nombres doivent aussi être impérativement suivis de ce signe, et ces nombres peuvent être entier ou réel.
    1. Avant la parenthèse fermante, on retrouve \s*: Le virgule suivant ou la parenthèse fermante du syntaxe rgb() peut être précédé d'un nombre de caractères blancs.

Catégories
CategoryPatternInfoFR
There are no comments on this page.
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki