Les expressions régulières

Modèles d'expressions régulières

Si les expressions régulières ont une puissance indéniable, elles n'en restent pas moins difficiles à mémoriser et à appliquer sans se tromper ou chercher pendant des heures.

Voici quelques exemples tirés de problématiques quotidiennes.

Motifs (patterns)

courriels (emails)

conformément à la RFC 2822 :

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

Cette expression valide aussi des adresses comme moi@domaine.com.nospam qui représente ici une adresse invalide. Pour restreindre les recherches et/ou les validations, il faut modifier l'expression :

\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b

valide une adresse de motif moi@domaine.ext, en limitant l'extension entre 2 et 4 caractères. ce qui signifie que moi@domaine.extension ou moi@sous-domaine.domaine.ext sont invalides.

dates

yyyy-mm-dd

^(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$

Valide une date entre 1900-01-01 et 2099-12-31 au format yyyy-mm-dd avec la possibilité d'utiliser les séparateurs "-" " " (espace) "/" et ".", soit :

  • yyyy-mm-dd

  • yyyy.mm.dd

  • yyyy/mm/dd

  • yyyy mm dd

mm-dd-yyyy

^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d$

dd-mm-yyyy

^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$

adresses IP v4

\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

Valide les adresses IP de 0.0.0.0 à 255.255.255.255. Si vous n'avez pas besoin de toute la plage, il faut restreindre le périmètre, par exemple :

\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3} (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b \b(?:\d{1,3}\.){3}\d{1,3}\b

les nombres

nombre flottant

^[-+]?[0-9]*\.?[0-9]+$

Valide un nombre à décimales, positif ou négatif, avec pour séparateur le ".".

notation scientifique (avec exposants)

[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?