Expressions régulières et validation des données dans les formulaires
Expressions régulières et validation des données dans les formulaires
Que sont les expressions régulières et comment les utiliser ?
Une expression régulière, ou regex, est un modèle décrivant une certaine quantité de texte. Par exemple, pour s'assurer que la personne qui remplit un formulaire soumet exactement le texte requis, on peut utiliser une expression régulière afin d'imposer un format précis dans les données saisies ou de les valider.
Par exemple, supposons que vous souhaitiez obtenir un numéro d'assurance nationale britannique (NIN). Ce numéro se compose de deux caractères, suivis de six chiffres, puis d'un autre caractère. L'expression régulière correspondant à ce modèle serait :
[az|AZ]{2}[0-9]{6}[az|AZ]
Ici, [az] signifie « n'importe quel caractère minuscule », [AZ] signifie « n'importe quel caractère majuscule », | signifie ou, donc [az|AZ] signifie « n'importe quel caractère », {2} signifie « répéter deux fois », etc.
Certains gouvernements proposent des expressions régulières pour les modèles fréquemment utilisés. Par exemple, consultez cet article de Wikipédia sur les codes postaux britanniques.
Pour un aide-mémoire rapide sur les expressions régulières, recherchez un « Guide des expressions régulières » ou poursuivez votre lecture.
Personnage | Légende | Exemple | Exemple de correspondance |
|---|---|---|---|
\d | La plupart des moteurs : un chiffre | fichier_\d\d | fichier_25 |
\d | .NET, Python 3 : un seul chiffre Unicode dans n’importe quel script | fichier_\d\d | fichier_9੩ |
\w | La plupart des moteurs : « caractère alphabétique » : lettre ASCII, chiffre ou trait de soulignement | \w-\w\w\w | A-b_1 |
\w | Python 3 : « caractère alphabétique » : lettre Unicode, idéogramme, chiffre ou trait de soulignement | \w-\w\w\w | 字-ま_۳ |
\w | .NET : « caractère de mot » : lettre Unicode, idéogramme, chiffre ou connecteur | \w-\w\w\w | 字-ま‿۳ |
\s | La plupart des moteurs de recherche : « caractère d’espacement » : espace, tabulation, saut de ligne, retour chariot, tabulation verticale | a\sb\sc | ab |
\s | .NET, Python 3, JavaScript : « caractère d’espacement » : tout séparateur Unicode | a\sb\sc | ab |
\D | Un caractère qui n'est pas un chiffre tel que défini par le \d de votre moteur | \D\D\D | abc |
\W | Un caractère qui n'est pas un caractère alphabétique tel que défini par le \w de votre moteur. | \W\W\W\W\W | *-+=) |
\S | Un caractère qui n'est pas un espace blanc tel que défini par le caractère \s de votre moteur. | \S\S\S\S | Yo-yo |
Quantificateurs
Quantificateur | Légende | Exemple | Exemple de correspondance |
|---|---|---|---|
+ | Un ou plusieurs | Version \w-\w+ | Version A-b1_1 |
{3} | Exactement trois fois | \D{3} | abc |
{2,4} | Deux à quatre fois | \d{2,4} | 156 |
{3,} | Trois fois ou plus | \w{3,} | Tutoriel sur les expressions régulières |
* | Zéro ou plusieurs fois | ABC* | AAACC |
? | Une fois ou rien | Pluriels ? | pluriel |
Plus de personnages
Personnage | Légende | Exemple | Exemple de correspondance |
|---|---|---|---|
. | Tout caractère sauf un saut de ligne | ac | abc |
. | Tout caractère sauf un saut de ligne | .* | Peu importe, mec. |
\ . | Un point (caractère spécial : doit être échappé par un \) | a\.c | ac |
\ | Échappe à un personnage spécial | \.\*\+\? \$\^\/\\ | .*+? $^/\ |
\ | Échappe à un personnage spécial | \[\{\(\)\}\] | [{()}] |
Logique
Logique | Légende | Exemple | Exemple de correspondance |
|---|---|---|---|
| | Opérande d'alternance / OU | 22|33 | 33 |
( … ) | Groupe de capture | A(ant|pple) | Apple (capture "pple") |
1 | Contenu du groupe 1 | r(\w)g\1x | expression régulière |
2 | Contenu du groupe 2 | (\d\d)\+(\d\d)=\2\+\1 | 12 + 65 = 65 + 12 |
(?: … ) | Groupe non capturant | A(?:nt|pple) | Pomme |
Plus d'espace blanc
Personnage | Légende | Exemple | Exemple de correspondance |
|---|---|---|---|
\t | Languette | T\t\w{2} | Tab |
\r | caractère de retour chariot | voir ci-dessous | |
\n | caractère de saut de ligne | voir ci-dessous | |
\r\n | Séparateur de lignes sous Windows | AB\r\nCD | AB |
\N | Perl, PCRE (C, PHP, R…) : un caractère qui n’est pas un saut de ligne | \N+ | abc |
\h | Perl, PCRE (C, PHP, R…), Java : un seul caractère d’espacement horizontal : tabulation ou espace Unicode. | ||
\H | Un caractère qui n'est pas un espace blanc horizontal | ||
\v | .NET, JavaScript, Python, Ruby : onglet vertical | ||
\v | Perl, PCRE (C, PHP, R…), Java : un caractère d’espacement vertical : saut de ligne, retour chariot, tabulation verticale, saut de page, séparateur de paragraphe ou de ligne | ||
\V | Perl, PCRE (C, PHP, R…), Java : tout caractère autre qu’un espace vertical | ||
\R | Perl, PCRE (C, PHP, R…), Java : un saut de ligne (paire retour chariot + saut de ligne, et tous les caractères correspondant à \v) |
Plus de quantificateurs
Quantificateur | Légende | Exemple | Exemple de correspondance |
|---|---|---|---|
+ | Le + (un ou plusieurs) est « gourmand ». | \d+ | 12345 |
? | Rend les quantificateurs « paresseux » | \d+? | 1 sur 1 2345 |
* | L'astérisque (*) (zéro ou plus) indique une avidité excessive. | UN* | AAA |
? | Rend les quantificateurs « paresseux » | UN*? | vide dans AAA |
{2,4} | Deux à quatre fois, « gourmand » | \w{2,4} | abcd |
? | Rend les quantificateurs « paresseux » | \w{2,4}? | ab dans ab cd |
Classes de personnages
Personnage | Légende | Exemple | Exemple de correspondance |
|---|---|---|---|
[…] | Un des personnages entre parenthèses | [AEIOU] | Une voyelle majuscule |
[…] | Un des personnages entre parenthèses | T[ao]p | Appuyer ou Haut |
- | Indicateur de portée | [az] | Une lettre minuscule |
[xy] | Un des caractères de la plage allant de x à y | [AZ]+ | SUPER |
[…] | Un des personnages entre parenthèses | [AB1-5w-z] | L'un des éléments suivants : A, B, 1, 2, 3, 4, 5, w, x, y, z |
[xy] | Un des caractères de la plage allant de x à y | [ -~]+ | Caractères de la section imprimable de la table ASCII . |
[^x] | Un caractère qui n'est pas x | [^az]{3} | A1 ! |
[^xy] | Un des caractères qui ne se situe pas dans l'intervalle de x à y | [^ -~]+ | Caractères qui ne figurent pas dans la section imprimable de la table ASCII . |
[\d\D] | Un caractère qui est un chiffre ou un non-chiffre | [\d\D]+ | Tous les caractères, y compris |
[\x41] | Correspond au caractère situé à la position hexadécimale 41 dans la table ASCII, c'est-à-dire A | [\x41-\x45]{3} | ABE |
Ancrages et limites
Ancre | Légende | Exemple | Exemple de correspondance |
|---|---|---|---|
^ | Début de chaîne ou début de ligne selon le mode multiligne. (Mais lorsque [^entre crochets], cela signifie « non »). | ^abc .* | abc (début de ligne) |
$ | Fin de chaîne ou fin de ligne selon le mode multiligne. Nombreuses subtilités dépendant du moteur. | .*? la fin$ | C'est la fin |
\UN | Début de la chaîne | \Aabc[\d\D]* | abc (chaîne... |
\z | Tout au bout de la chaîne | fin\z | Ceci est...\n... la fin |
\Z | Fin de chaîne ou (sauf en Python) avant le dernier saut de ligne | la fin\Z | Ceci est...\n... la fin \n |
\G | Début de la chaîne ou fin de la correspondance précédente | ||
b | Limite du mot | Bob.*\bcat\b | Bob a mangé le chat |
b | Limite du mot | Bob.*\b\кошка\b | Bob a mangé le koska |
\B | c.*\Bcat\B.* | imitateurs |