Petit guide sur l’utilisation des expressions régulière dans les formulaires
AVANT TOUT
Une regex (Expression régulière) est toujours entourée de caractères spéciaux appelés délimiteurs.
Voici la liste des délimiteurs les plus pratiques à utiliser « /« , « # » ou « @« .Il est plus facile de choisir un délimiteur qui ne soit pas un caractère attendu dans votre champ de saisie, que de l’échapper (cf chapitre correspondant) .
Les options éventuelles sont placées après le second délimiteur. (@Ma regex@Options)
Exemple : @Ma regex@
le champ de saisie doit contenir : Ma regex
Sensibilité à la casse ou pas
Attention, les regex sont naturellement « sensibles à la casse ».
Exemple : @Ma regex@
le champ de saisie doit contenir : Ma regex
Il ne peut contenir : ma regex
Pour les rendre insensibles à la casse, il faut ajouter en option, le « i » après le second délimiteur
Exemple : @Ma regex@i
le champ de saisie peut contenir : Ma regex, ma regex, MA REGEX, ….
Utilisation de la fonction "ou"
Pour ajouter une condition « ou » il faut utiliser le « | » (signe pipe)
- Ctrl + Alt + 6 sur PC
- ALT + Option + L sur Mac
Exemple : @Ma regex|Ma rolex@
le champ de saisie peut contenir : Ma regex ou Ma rolex
Début et fin de chaîne
Pour indiquer le début d’une chaîne, il faut utiliser le « ^ » (accent circonflexe)
Exemple : @^Ma regex@
le champ de saisie peut contenir par : Ma regex, Ma regex en magenta
le champ de saisie ne peut pas contenir par : En magenta Ma regex
Pour indiquer la fin d’une chaîne, il faut utiliser le « $ » (dollar)
Exemple : @Ma regex$@
le champ de saisie peut contenir par : En magenta Ma regex
le champ de saisie ne peut pas contenir par : Ma regex en magenta
Les classes de caractères
Les classes de caractères, sont un ensemble de caractères pouvant convenir, ils sont délimités par « [ » et « ] » (crochets)
Exemple : @Ma r[ée]gex@
le champ de saisie peut contenir par : Ma regex, Ma régex
Les intervalles de classe
Il est possible d’autoriser des plages de caractères grâce au symbole « – » (le tiret ou le moins)
Exemple : [abcdefghijklmnopqrstuvwxyz] peut être remplacé par : [a-z]
Exemple : [abcde] peut être remplacé par : [a-e]
Exemple : [0123456789] peut être remplacé par : [0-9]
Les caractères pris en compte sont ceux situé avant et après le « –«
Exemples : [012348] peut être remplacé par : [0-48]
Exemple : [abcdefghijklmnopqrstuvwxyz0123456789] peut être remplacé par : [a-z0-9]
Exemple : [0123456789] peut être remplacé par : [0-9]
On peut éviter aussi d’utiliser le « i«
Exemple : [abcdeABCDE0123] peut être remplacé par : [a-eA-E0-3]
Pour interdire une plage de caractères (dire qu’une plage ne contient pas les caractères décrits), il faut utiliser le « ^ » après le premier « [«
Le « ^ » sert aussi à indiquer le début d’une chaîne mais entre « [ ]« , il sert à indiquer que l’on ne veut pas la plage de caractère saisie
Sur le même principe le « $ » sert à indiquer la fin d’une chaine
Exemple : @[^0-9]@ le champ de saisie ne doit pas contenir un chiffre entre 0 et 9
Exemple : @^[^0-9]@ le champ de saisie ne doit pas commencer par un chiffre entre 0 et 9
Exemple : @[^0-9]$@ le champ de saisie ne doit pas se terminer par un chiffre entre 0 et 9
Les quantificateurs
Les quantificateurs sont des symboles qui permettent de dire combien de fois peuvent se répéter un caractère. Ces symboles sont placés juste après le caractère concerné.
Pour signifier qu’une lettre est facultative, on utilise le « ? » (point d’interrogation). Elle peut y être 0 ou 1 fois.
En pratique pour « patient » ou « patients » on note @patients?@
Exemple : @regex?@ le champ de saisie peut contenir : rege ou regex le champ de saisie ne peut pas contenir : regexx
Pour signifier qu’une lettre est obligatoire , on utilise le « + » (plus). Elle peut apparaître 1 ou plusieurs fois.
Exemples : @regex+@ le champ de saisie peut contenir : regex ou regexx le champ de saisie ne peut pas contenir : rege
Pour signifier qu’une lettre est facultative, on utilise « * » (astérisque) . Elle peut y être 0,1 fois ou plusieurs fois.
Exemple : @regex*@ le champ de saisie peut contenir : rege ou regex ou regexx
Les suites de caractéres
Pour une suite de caractères, il faut en plus des quantificateurs, utiliser « ( ) » (parenthèses)
Exemple : @re(gex)*@ le champ de saisie peut contenir : reg ou regex ou regexgex ou regexgexgex
Les répétitions
#bobolatête
Pour délimiter le nombre de répétitions, il faut utiliser les »{}« (accolades).
Si on met juste un nombre dans une accolade, cela signifie que le caractère (ou le groupe de caractère entre parenthèses) est répéter exactement le nombre de fois renseigné.
Exemple : @reg(ex)2@ le champ de saisie peut contenir : regexex
Si on met sépare deux chiffres par une « , » (virgule) , cela signifie que le caractère (ou le groupe de caractère entre parenthèses) peut être répété pour les valeurs comprises entre ces deux chiffres {min,max}
Exemples : @reg(ex){1,3}@ le champ de saisie doit contenir : regex ou regexex ou regexexex
Si on ne souhaite pas mettre de valeur min ou max, il ne faut pas saisir de valeur avant ou après la « ,«
On peut remplacer les quantificateurs « $ », « + » et « ? » par des accolades
- « ? » revient à écrire {0,1} ; ou {,1}
- « + » revient à écrire {1,}
- « * » revient à écrire {0,}.
Exemple : @reg(ex){,3}@ le champ de saisie peut contenir : reg ou regex ou regexex ou regexexex
Exemple : @reg(ex){3,}@ le champ de saisie peut contenir : regexexex ou regexexexexex ou regexex ou regexexexexexexexex ….
ECHAPPER
Si votre suite de caractères contient un métacaractère décrit dans les points précédents # ! ^ $ ( ) [ ] { } ? + * . \ il faut simplement le notifier (ou l’échapper) en utilisant devant lui « \ » (antislash)
Exemple : @regex\?@ le champ de saisie doit être : regex?
A la différence de : @regex?@ le champ de saisie peut contenir : rege ou regex
Pour les classes (les caractères entre « [ ]« ), il n’est pas nécessaire d’échapper un métacaractère, sauf pour :
« # » (dièse), il faut mettre un « \ » (antislash)
« ] » (crochet de fermeture), il faut mettre un « \ » (antislash)
« – » (tiret ou moins des intervalles de classes ), il faut mettre un « \ » (antislash)
Exemple : @[0-9*\#]@
le champ de saisie peut être un caractère de 0 à 9 ou * ou #
Exemple : @[0-9()[\]{}]@ le champ de saisie peut être un caractère de 0 à 9 ou (, ), [, ], {, }
les abréviations
- \d
Indique un chiffre.
Cela revient exactement à taper [0-9] - \D
Indique ce qui n’est PAS un chiffre.
Cela revient à taper [^0-9] - \w
Indique un caractère alphanumérique ou un tiret de soulignement.
Cela correspond à [a-zA-Z0-9_] - \W
Indique ce qui n’est PAS un mot.
Cela revient à taper [^a-zA-Z0-9_] - \n
Indique une nouvelle ligne (touche entrée) - \r
Indique un retour chariot - \s
Indique un espace blanc - \S
Indique ce qui n’est PAS un espace blanc (\t \n \r) - .
Indique n’importe quel caractère.
Il autorise donc tout ! Sauf les touches entrée de \n
Exemple : @^\d{11}$@
le champ de saisie peut être un caractère de 0 à 9 répété 11 fois sans aucune séparation possible
Exemple : @^[0-9]{11}$@ idem mais sans abréviation
Exemples
Exemple 1 Numéro de téléphone
\^0[1-8]([-. ]?[0-9]{2}){4}$\
@^0[1-8]([-. ]?[0-9]{2}){4}$@
^0 = Commence par un 0 (zéro)
[1-8] = Suivi d’un chiffre de 1 à 8
( : début d’une répétition
[-. ]? = Suivi d’un – (tiret) d’un . (point) d’un vide (espace) ou de rien
[0-9]{2} = suivi d’un numéro composé de deux chiffres de 0 à 9
) = fin de répétition
{4} : la répétition est reprise 4 fois
$ = fin de chaîne.
Ce qui nous donne possiblement : 04-94-00-20-40 ou 04.94.00.20.40 ou 04 94 00 20 40 ou 0494002040
Ce qui nous donne possiblement : 04-94-00-20-40 ou 04.94.00.20.40 ou 04 94 00 20 40 ou 0494002040 ou +334-94-00-20-40 ou +334.94.00.20.40 ou +334 94 00 20 40 ou +33494002040
Exemple 2 Numéro de téléphone en +33 ou avec 0
Avec la fonction ou en plus (fonction ou = « |« )
@^(0|\+33)([ .-]?[0-9]{2}){5}$@
Exemple 3 avec chatGPT et des abréviations
Instruction « réalise moir une expression régulière qui correspond à un numéro de téléphone à 10 chiffres, divisés en 5 groupes de 2 chiffres, pouvant être séparés par des points, des tirets, des espaces ou rien :
@^(?:\d{2}[ .-]?){4}\d{2}$@
^
: début de la chaîne(?:\d{2}[ .-]?){4}
: quatre groupes de 2 chiffres (\d{2}
), chacun pouvant être suivi d’un espace, d’un point ou d’un tiret ([ .-]?
).(?: ... )
est un groupe non capturant.\d{2}
: les deux derniers chiffres du numéro de téléphone$
: fin de la chaîne