Le web de Dominique Guebey – Bazar informatique

Page : http://www.dg77.net/tekno/manuel/regexp.htm


  D o m i n i q u e   G u e b e y    J u n g l e    Bazar informatique

Expressions rationnelles

Définitions et terminologie

Regular expressions dites aussi « expressions régulières ».

Contrôle/validation d’une adresse email

Extrait de notre module PHP utilisant la fonction eregi pour contrôler les adresses email. Cette expression tient compte de la possibilité d’avoir une adresse IP (IPV4) simple (sans masque) à la place du nom de domaine. Elle retourne « vrai » (TRUE) si les conditions qu’elle spécifie sont réalisées – et « faux » (FALSE) dans le cas contraire.

^([-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+)@(((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]?))|(([-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+)\.)([-A-Za-z]{2,4}))$
Structure générale : ^(…)@(…)$
^(…
Le « chapeau » désigne la partie initiale de la chaîne à analyser.
([-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+)
Les parenthèses contiennent une expression à « évaluer ».
…+)@(…
Présence obligatoire d’un arrobe.
…)$
Le dollar final spécifie la partie finale.
[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+
Partie entre crochets : indique tous les caractères qu’on peut s’attendre à trouver. A noter :
\'
L’antislash indique que le caractère suivant est à prendre en compte quoique ce soit un caractère spécial (en l’occurence l’apostrophe).
\\
Idem pour l’antislash lui même.
Point de ponctuation
…mais pas besoin d’antislash pour le point, dans la liste entre crochets tout du moins. (voir plus bas le point de séparation).
0-9, A-Z et a-z
Le tiret indique une suite (par exemple A-Z correspond aux 26 lettres de l’alphabet en majuscule). Dans ce cas il est lui aussi un caractère spécial. Néanmoins il est considéré comme un caractère normal (pas besoin d’antislash avant) s’il est le premier ou le dernier de la suite (cf l’exemple : un tiret se trouve en première position de la liste de caractères).
[…]+
Le plus final indique une présence obligatoire : on doit avoir un exemplaire au moins de ce qui est spécifié avant (liste de caractères possibles entre crochets).
S’il y avait « ? », celà voudrait dire aucun ou un seul (présence facultative).
S’il y avait « * » (astérisque), celà voudrait dire aucun ou un nombre quelconque.
@
Après le début de l’adresse e-Mail (cf le « ^ » ci-dessus), on doit trouver l’arrobase qui sépare la partie locale du nom de domaine .
Structure de la suite : ((…)|(…))$
  • Rappel : le dollar qui termine l’expression spécifie qu’on analyse la fin de la chaîne de caractères.
  • La barre verticale, ou pipe en anglais ( = « tube »), signifie « ou » ; i.e. une des possibilités doit être réalisée.
  • En l’occurence on va traiter deux cas possibles :
    • Soit on a un nom de domaine (du type alphonse.fr où alphonse=domaine et fr=top level domain).
    • Soit on a une adresse IP (ce qui permet d’atteindre directement le serveur d’email sans passer par un serveur DNS) de la forme nnn.nnn.nnn.nnn (nnn étant un nombre limité à 255).
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
On a plusieurs possibilités (pipe de séparation) :
  • 25[0-5] : un nombre de 250 à 255.
  • 2[0-4][0-9] : un nombre de 200 à 249.
  • [01]?[0-9][0-9]? : un nombre de 0 à 199. Noter l’utilisation du point d’interrogation : On accepte par exemple 001, mais aussi 01 ou 1. Cf aussi utilisation de + ? * supra.
(([-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+)\.)([-A-Za-z]{2,4})
Analyse du nom de domaine en deux parties séparées par un point. Structure : (([…]+)\.([…]{…})
\.
Le point de séparation des adresses IP doit être précédé d’un antislash pour désigner effectivement un caractère « point ». Sinon il signifierait « un caractère quelconque ».
[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+
Label du domaine. Les caractères autorisés sont plus nombreux qu’on pense souvent.
[-A-Za-z]{2,4}
Top level domain (fr, com, net, org…). Les chiffres entre accolade « {2,4} » signifient que la chaîne peut compter de 2 à 4 caractères. A l’inverse du label, la gamme de caractères autorisés est des plus restreinte.
Reste à voir
  • La partie locale (avant l’arrobe) ne doit pas dépasser 64 caractères (RFC 2822).
  • Le nom de domaine ne doit pas dépasser 255 caractères (RFC 2822).
  • Adresse IP : si le port est ajouté, vérifier sa validité.
  • Adresses IPV6…