Section courante

A propos

Section administrative du site

La validation des adresses de courrier électronique constitue l'un des problèmes les plus fréquents et parfois les plus délicats à résoudre lors du développement d'un formulaire Web ou d'une application de gestion de données. À première vue, il peut sembler suffisant de vérifier la présence d'un symbole «@» dans une chaîne de caractères. Toutefois, la réalité est beaucoup plus complexe, car une adresse électronique doit respecter plusieurs règles de syntaxe afin d'être considérée comme valide. Une validation inadéquate peut entraîner des erreurs de communication, des échecs d'envoi de messages ou encore l'enregistrement de données incorrectes dans une base de données.

Parmi les règles fondamentales généralement utilisées, une adresse électronique doit contenir exactement un caractère arobas (@), lequel sépare le nom de l'utilisateur du nom de domaine. De plus, la partie située après l'arobas doit comporter au moins un point (.) afin d'identifier correctement le domaine et son extension. Enfin, certains caractères spéciaux sont interdits dans une adresse électronique standard, tandis que d'autres doivent être utilisés selon des conventions précises. Une validation efficace doit donc être capable de détecter les caractères non autorisés, les arobas multiples, les domaines incomplets ou encore les adresses vides.

En somme, il faut tenir compte des règles suivantes :

Bien que les normes officielles relatives aux courriels soient relativement complexes et définies par plusieurs documents techniques, il est souvent possible de mettre en ouvre une validation pratique répondant aux besoins de la majorité des applications. Le programme Delphi, Kylix ou Lazarus présenté dans cette page illustre une méthode simple permettant d'effectuer une première vérification de la validité d'une adresse électronique. L'algorithme examine le contenu du texte fourni, recherche les caractères interdits, vérifie la présence d'un unique arobas et s'assure que le domaine contient bien un point après celui-ci.

Les exemples inclus dans le programme permettent ensuite de tester différentes adresses, qu'elles soient valides ou incorrectes. On peut ainsi constater qu'une adresse complète comme «abc@gladir.com» est acceptée, tandis que des chaînes incomplètes, des adresses contenant plusieurs arobas ou encore des caractères non autorisés sont correctement rejetées. Cet exemple constitue une excellente introduction aux techniques de validation de données et montre comment quelques dizaines de lignes de code peuvent améliorer considérablement la fiabilité d'une application en empêchant la saisie d'informations erronées avant leur traitement ou leur entreposage.

A l'aide du code source Delphi/Kylix/Lazarus suivant, vous trouverez la réponse que vous souhaitez :

  1. Program Email;
  2.  
  3. {$APPTYPE CONSOLE} 
  4. Uses SysUtils; 
  5.  
  6. Function IsEmail(Email:String):Boolean;
  7. Var
  8.  I,ArobasFound,AfterArobas:Integer;
  9. Begin
  10.  If(Email = '')or(Length(Email)=0)Then Begin
  11.   IsEmail:=False;
  12.   Exit;
  13.  End;
  14.  For I:=1 To Length(Email) do Begin
  15.   Case Email[I] of
  16.      #9 ,#10 ,#13 ,' ','(',')',':',',',
  17.      '/','''','"','~','`','!','#','$','%','^','&','*','+','=','[',
  18.      ']','{','}','|','\','?','<','>':Begin
  19.       IsEmail:=False;
  20.       Exit;
  21.      End;
  22.   End;
  23.  End;
  24.  ArobasFound := 0;
  25.  FOR I:=2 to Length(Email) do Begin
  26.   If Email[I] = '@'Then Begin
  27.    Inc(ArobasFound);
  28.    If ArobasFound = 1 Then AfterArobas:=I;
  29.   End;
  30.  End;
  31.  If ArobasFound <> 1Then Begin
  32.   IsEmail:=False;
  33.   Exit;
  34.  End;
  35.  Inc(AfterArobas,2);
  36.  While (AfterArobas < Length(Email)) and (Email[AfterArobas] <> '.') do Inc(AfterArobas);
  37.  IsEmail:=Not((AfterArobas >= Length(Email) - 1) OR (Email[AfterArobas] <> '.'));
  38. End;
  39.  
  40. BEGIN
  41.  WriteLn('Courriel «abc» est valide: ',IsEmail('abc'));
  42.  WriteLn('Courriel «@» est valide: ',IsEmail('@'));
  43.  WriteLn('Courriel «@abc.abc» est valide: ',IsEmail('@abc.abc'));
  44.  WriteLn('Courriel «abc@gladir.com» est valide: ',IsEmail('abc@gladir.com'));
  45.  WriteLn('Courriel «abc@@gladir.com» est valide: ',IsEmail('abc@@gladir.com'));
  46.  WriteLn('Courriel «abc@gl][adir.com» est valide: ',IsEmail('abc@gl][adir.com'));
  47. END.

on obtiendra le résultat suivant :

Courriel «abc» est valide: false
Courriel «@» est valide: false
Courriel «@abc.abc» est valide: false
Courriel «abc@gladir.com» est valide: true
Courriel «abc@@gladir.com» est valide: false
Courriel «abc@gl][adir.com» est valide: false


Dernière mise à jour : Dimanche, le 17 août 2014