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]+)?