Wiki source for PatternValidColorInfoFR


Show raw source

=====Expression régulière nommée PATTERN_VALID_COLOR=====
'/^({{color text="?>" c="rosybrown" bg="white"}}{{color text="#" c="firebrick" bg="white"}}{{color text="(" bg="white" c="red"}}{{color text="?>" c="rosybrown" bg="white"}}{{color text="[\da-f]" bg="white" c="navy"}}{{color text="{3}" bg="white" c="midnightblue"}}{{color text=")" bg="white" c="red"}}{{color text="{1,2}" bg="white" c="red"}}|{{color text="rgb\(" c="coral" bg="lemonchiffon"}}{{color text="\s*" c="darkkhaki" bg="lemonchiffon"}}{{color text="\d+" c="darkorange" bg="lemonchiffon"}}{{color text="(" c="blueviolet" bg="lemonchiffon"}}{{color text="(" c="chocolate" bg="lemonchiffon"}}{{color text="?>" c="rosybrown" bg="lemonchiffon"}}{{color text="\.\d*" c="darkgoldenrod" bg="lemonchiffon"}}{{color text=")" c="chocolate" bg="lemonchiffon"}}{{color text="?" c="peru" bg="lemonchiffon"}}{{color text="%)" c="blueviolet" bg="lemonchiffon"}}{{color text="?" c="darkorchid" bg="lemonchiffon"}}{{color text="\s*" c="darkkhaki" bg="lemonchiffon"}}{{color text="(?>" c="springgreen" bg="lemonchiffon"}}{{color text="," c="mediumseagreen" bg="lemonchiffon"}}{{color text="\s*" c="palegreen" bg="lemonchiffon"}}{{color text="\d+" c="limegreen" bg="lemonchiffon"}}{{color text="(" c="purple" bg="lemonchiffon"}}{{color text="?(1)" c="blueviolet" bg="lemonchiffon"}}{{color text="(\.\d*)?" c="crimson" bg="lemonchiffon"}}{{color text="%)" c="purple" bg="lemonchiffon"}}{{color text="\s*" c="palegreen" bg="lemonchiffon"}}{{color text="){2}" c="springgreen" bg="lemonchiffon"}}{{color text="\)" c="coral" bg="lemonchiffon"}})$/i'
En langage humain, ce masque est utilisé pour valider un syntaxe de couleur correspondant à l'un des cas suivant:
- #rgb
- #RRGGBB
- rgb( IR, IG, IB)
- rgb( rR%, rG%, rB%)
où :
- dans #rgb: r, g et b sont trois caractères hexadécimaux, représentant respectivement la valeur de la couleur rouge, verte et bleue.
- dans #RRGGBB: RR est un mot formé de deux caractères hexadécimaux représentant la couleur rouge, idem pour GG et BB.
- dans rgb( IR, IG, IB): IR, IG et IB sont des nombres entiers (dont les valeurs doivent être comprises entre 0 et 255 inclus mais cette condition n'est pas vérifiée par le masque).
- dans rgb( rR%, rG%, rB%): rR, rG et rB sont des nombres réels (dont les valeurs doivent être comprises entre 0 et 100, mais cette condition n'est pas vérifiée par le masque).

====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 {{color c="red" bg="white" text="[\da-f]"}} spécifie un caractère hexadécimal.
Le quantifieur {{color c="red" bg="white" text="{3}"}} recherche un occurrence de 3 caractères hexadécimaux, et le sous-masque {{color c="red" bg="white" text="([\da-f]{3})"}} représente donc une suite de 3 caractères hexadécimaux.
Le quantifieur {{color c="red" bg="white" text="{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 {{color c="red" bg="white" text="#"}}
===La syntaxe rgb()===
Cette partie du masque commence par {{color c="red" bg="white" text="rgb\(\s*"}} et se termine par {{color c="red" bg="white" text="\)"}}. La chaîne à valider doit commencer par {{color c="red" bg="white" text="rgb("}} et se terminer par {{color c="red" bg="white" text=")"}}. 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}**
a) \d+: 1 ou plusieurs caractères décimaux.
a) (?>\.\d*)?%:
i) La séquence {{color text="?>" c="rosybrown" bg="lemonchiffon"}} sert à empêcher que la parenthèse soit capturant, pour l'instant, nous l'ignorerons.
i) {{color text="\.\d*" c="crimson" bg="white"}}: Le caractère **.** (un et un seul, remarquez l'absence de quantifieur) suivi éventuellement d'une suite de caractères décimaux.
i) Le sous-masque est suivi du quantifieur {{color text="?" c="red" color="white"}} et du caractère {{color text="%" c="red" color="white"}}. 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.
a) ((?>\.\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.
a) \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 %. //
a) (?>,\s*\d+...){2} : Voyons maintenant cette partie, colorée en vert dans le masque ci-haut. On a le caractère virgule ({{color text="," c="red" bg="white"}}), suivi de 0, 1 ou plusieurs caractères blancs ({{color text="\s*" c="red" bg="white"}}) et ensuite de 1 ou plusieurs chiffres décimaux ({{color text="\d+" c="red" bg="white"}}). Tout cela, avec le reste du sous-masque est répétée deux fois ({{color text="){2}" c="red" bg="white"}}).
a) Le reste du masque qui n'a pas été expliquée est **(?(1)(\.\d*)?%)**
i) {{color text="(?(1)...)" c="red" bg="white"}}: 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 {{color text="(\.\d*)?%" c="purple" bg="white"}}. 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.
i) Avant la parenthèse fermante, on retrouve {{color text="\s*" c="red" bg="white"}}: 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
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki