Expressions Régulières.

Petit guide sur l’utilisation des expressions régulière dans les formulaires

1) 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 » /, # 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 comme décrit au point 8) .
  • Les options éventuelles sont placées après le second délimiteur. (@Ma regex@Options)

Pour : @Ma regex@
le champ de saisie doit contenir : Ma regex

2) Sensibilité à la casse ou pas

  •  Attention, les regex sont naturellement « sensibles à la casse ».

Pour : @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 une option, le « i » (lettre i) après le second délimiteur

Pour : @Ma regex@i
le champ de saisie peut contenir : Ma regex ou ma reGex ou MA REGEx

3) Utilisation de la fonction « ou »

  • Pour ajouter une condition « ou » il faut utiliser le « | » (pipe)

Pour : @Ma regex|Ma rolex@
le champ de saisie peut contenir : Ma regex ou Ma rolex

4) Début et fin de chaîne

  • Pour indiquer le début d’une chaîne, il faut utiliser le « ^ « (accent circonflexe) :
  • Pour indiquer la fin d’une chaîne, il faut utiliser le « $ « (dollar) :

Pour : @^Ma regex@
le champ de saisie doit commencer par Ma regex 

Pour : @Ma regex$@
le champ de saisie doit finir par Ma regex 

5) 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)

Pour : @Ma r[eé]gex@
le champ de saisie peut contenir  Ma regex ou Ma régex

6) Les intervalles de classe

  • Il est possible d’autoriser des plages de caractères grâce au symbole « – » (le tiret le moins)

Par exemple :

[abcdefghijklmnopqrstuvwxyz] peut être remplacer par [a-z] :
[abcde] par [a-e]
[0123456789] peut être remplacé par [0-9]
[012348]
par [0-48] ce qui signifie un chiffre de 0 à 4 ou le 8
[abcdefghijklmnopqrstuvwxyz0123456789] peut être remplacé par [a-z0-9]

Et sans passer par une option comme le « i »,
[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789] peut être remplacé par [a-zA-Z0-9]

  • 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 « [« 

Pour : @[^0-9]@
le champ de saisie ne doit pas contenir un chiffre de 0 à 9

  • le « ^ » sert à 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

Pour : @^[^0-9]@
le champ de saisie ne doit pas commencer par un chiffre de 0 à 9

Pour : @[^0-9]$@
le champ de saisie ne doit pas se terminer par un chiffre de 0 à 9

7) 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é.

Les symboles les plus courants sont :

  • Pour signifier qu’une lettre est facultative, on utilise le « ? » (point d’interrogation). Elle peut y être 0 ou 1 fois.

Pour : @regex?@
le champ de saisie peut contenir regex ou rege 

  • Pour signifier qu’une lettre est obligatoire , on utilise le « + » (plus). Elle peut apparaître 1 ou plusieurs fois.

Pour : @regex+@
le champ de saisie peut contenir regex ou regex ou regexxxxxx ….

  • Pour signifier qu’une lettre est facultative, on utilise l’ « * » (astérisque) d’interrogation). Elle peut y être 0,1 fois ou plusieurs fois.

Pour : @regex*@
le champ de saisie peut contenir rege ou regex ou regexxxxx


Idée

Pour le pluriel, on peut ainsi utiliser le « ? » juste après le « s » du pluriel.

Pour : @patient?@
Le champ de saisie peut contenir patient ou patients


7 Bis) Les quantificateurs pour un groupe de caractères

Au 7) nous avons vu que le quantificateur permet des répétition pour un caractère. Le même principe s’applique pour une suite de caractères.

  • Pour une suite de caractère, il faut en plus des quantificateurs, utiliser les « ( ) » (parenthèses)

Pour : @Bla(bla)*@
le champ de saisie peut contenir Bla ou Blabla ou Blablablablabla …

7 Ter) Définir le nombre de répétitions pour un quantificateur

(ou comment avoir mal à la tête)

Pour délimiter le nombre de répétitions, il faut utiliser les « { } » (accolades).

Il y a trois façons d’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 renseigner.

Pour : @Bla(bla){3}@
le champ de saisie doit contenir Blablablabla  strictement

  • 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éter pour les valeurs comprises entre ces deux chiffres {min,max}

Pour : @Bla(bla){2,4}@
Le champ de saisie peut contenir Blablabla  ou Blablablabla ou Blablablablabla 

  • Pour on ne met pas de valeur min ou de valeur max , avant ou après la « , »
    • {,15} signifie répétition entre 0 et 15
    • {4,} signifie répétition entre 4 et l’infini

Pour : @Bla(bla){2,}@
Le champ de saisie peut contenir Blablabla  ou Blablablabla ou Blablablablablabla 


Idée

On peut alors remplacer les quantificateurs suivants par des accolades
? revient à écrire {0,1} ; ou {,1}
+ revient à écrire {1,} ;
* revient à écrire {0,}.


8) Pour vous échapper

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 l’ « \ » (antislash)

Pour : @regex\?@
le champ de saisie doit être  regex ?

Contrairement à  : @regex?@
le champ de saisie peut contenir regex ou rege 
Que l’on peut aussi écrire : @regex{0,1}@

/9{1}\) Les exceptions

 9.1 Pour les classes

C’est à dire 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)

Pour : @[0-9*\#]@
le champ de saisie peut être  un caractère de 0 à 9 ou * ou #

  • ] (crochet de fin), il faut mettre un « \ » (antislash)

Pour : @[0-9()[\]{}]@
le champ de saisie peut être  un caractère de 0 à 9 ou (, ), [, ], {, }

  • – (tiret ou moins des intervalles de classes ), il faut mettre le « -« (tiret ou moins) à la fin  de l’intervalle [0-9]

 9.2 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

Maintenant vous pouvez vous amuser à composer quelques regex pour vos formulaires

Et pour s’amuser par 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)
en ajoutant le ?
on obtient [-. ]? 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

Exemple 2 Numéro de téléphone en +33 ou avec 0

Avec la fonction ou en plus

@^(0|+33)[1-8]([-. ]?[0-9]{2}){4}$@

Exemple 3

@^[0-9]{11}$@ qui nous donne un champ pour saisir une chaîne de  caractères représentée par 11 chiffres de 0 à 9.