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
de 0 à 9

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
c

\s

.NET, Python 3, JavaScript : « caractère d’espacement » : tout séparateur Unicode

a\sb\sc

ab
c

\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
CD

\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
y compris les nouvelles lignes, auxquelles le point régulier ne correspond pas.

[\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
(tous les principaux moteurs sauf JS)

\Aabc[\d\D]*

abc (chaîne...
...commencer)

\z

Tout au bout de la chaîne
Non disponible en Python et JS

fin\z

Ceci est...\n... la fin

\Z

Fin de chaîne ou (sauf en Python) avant le dernier saut de ligne
Non disponible en JS

la fin\Z

Ceci est...\n... la fin \n

\G

Début de la chaîne ou fin de la correspondance précédente
.NET, Java, PCRE (C, PHP, R…), Perl, Ruby

b

Limite du mot
La plupart des moteurs : position où un seul côté est une lettre ASCII, un chiffre ou un trait de soulignement

Bob.*\bcat\b

Bob a mangé le chat

b

Limite du mot
.NET, Java, Python 3, Ruby : position où un seul côté est une lettre Unicode, un chiffre ou un trait de soulignement

Bob.*\b\кошка\b

Bob a mangé le koska

\B

Pas une limite de mots

c.*\Bcat\B.*

imitateurs

Nous utilisons des cookies pour améliorer votre expérience de navigation et analyser le trafic du site. En cliquant sur "Accepter", vous consentez à notre utilisation des cookies. Politique de confidentialité