La validation d'une adresse de courrier électronique (courriel) constitue l'un des problèmes les plus fréquents dans le développement d'applications Web, de logiciels de gestion et de formulaires en ligne. À première vue, cette tâche peut sembler relativement simple puisqu'une adresse électronique possède généralement une structure facile à reconnaître. Pourtant, lorsqu'on cherche à effectuer une validation fiable avant l'envoi ou l'enregistrement d'un formulaire, la situation devient rapidement plus complexe. Une adresse de courriel valide doit respecter plusieurs règles syntaxiques précises afin de pouvoir être correctement interprétée par les serveurs de messagerie. Il faut notamment vérifier la présence d'un unique caractère arobas (@), s'assurer que le nom de domaine situé après celui-ci est correctement formé et contient au minimum un point séparant le domaine principal de son extension. De plus, certains caractères spéciaux sont interdits ou nécessitent un traitement particulier, tandis que d'autres peuvent rendre l'adresse invalide malgré une apparence correcte. Une validation insuffisante risque de permettre la saisie de données erronées, alors qu'une validation trop stricte peut rejeter des adresses pourtant légitimes.
Le programme QuickBASIC présenté ci-dessous illustre une méthode simple permettant de vérifier les principaux critères de validité d'une adresse électronique. L'algorithme commence par examiner chaque caractère de la chaîne afin de détecter la présence de caractères interdits tels que les espaces, certaines ponctuations ou des caractères de contrôle invisibles. Il vérifie ensuite que l'adresse contient exactement un seul symbole arobas, condition indispensable à toute adresse électronique valide. Une fois cette étape franchie, le programme s'assure que la partie correspondant au nom de domaine contient bien un point placé à un endroit approprié. Si l'une de ces vérifications échoue, la fonction retourne immédiatement une valeur indiquant que l'adresse est invalide. Dans le cas contraire, elle confirme que la syntaxe de base de l'adresse est acceptable. Les différents exemples fournis permettent de tester plusieurs cas typiques, incluant des adresses incomplètes, des adresses contenant plusieurs caractères arobas, des domaines mal formés ou encore des caractères non autorisés. Cet exemple constitue une excellente introduction aux techniques de validation de données en programmation et démontre comment quelques contrôles simples peuvent considérablement améliorer la qualité des informations saisies par les utilisateurs. Bien qu'une validation complète conforme aux normes modernes de messagerie électronique soit beaucoup plus complexe, cette approche fournit une base solide pour de nombreux programmes et formulaires nécessitant une vérification rapide des adresses de courriel.
Voici les règles à suivre :
- Un courriel doit contenir exactement un arobas (@),
- Le nom de domaine, situé après l'arobas (@) contient un point (.),
- Seul certains code de caractères sont acceptés.
A l'aide du code source QuickBASIC suivant, vous trouverez la réponse que vous souhaitez :
- DECLARE FUNCTION Bool2Str$ (value!)
- DECLARE FUNCTION IsEmail! (Email$)
- PRINT "Courriel «abc» est valide: " + Bool2Str$(IsEmail("abc"))
- PRINT "Courriel «@» est valide: " + Bool2Str$(IsEmail("@"))
- PRINT "Courriel «@abc.abc» est valide: " + Bool2Str$(IsEmail("@abc.abc"))
- PRINT "Courriel «abc@gladir.com» est valide: " + Bool2Str$(IsEmail("abc@gladir.com"))
- PRINT "Courriel «abc@@gladir.com» est valide: " + Bool2Str$(IsEmail("abc@@gladir.com"))
- PRINT "Courriel «abc@gl][adir.com» est valide: " + Bool2Str$(IsEmail("abc@gl][adir.com"))
-
- FUNCTION Bool2Str$ (value)
- IF value = 0 THEN Bool2Str$ = "FALSE" ELSE Bool2Str$ = "TRUE"
- END FUNCTION
-
- FUNCTION IsEmail (Email$)
- AfterArobas = 0
- IF LEN(Email$) = 0 THEN
- IsEmail = 0
- EXIT FUNCTION
- END IF
- FOR I = 1 TO LEN(Email$)
- CurrChar$ = LEFT$(MID$(Email$, I), 1)
- SELECT CASE CurrChar$
- CASE " ", "(", ")", ":", ",", "/", "\", "~", "`", "!", "#", "$", "%", "^", "&", "*", "+", "=", "[", "]", "{", "}", "|", "\", "?", "<", ">"
- IsEmail = 0
- EXIT FUNCTION
- END SELECT
- IF CurrChar$ = CHR$(9) OR CurrChar$ = CHR$(13) OR CurrChar$ = CHR$(10) OR CurrChar$ = CHR$(34) THEN
- IsEmail = 0
- EXIT FUNCTION
- END IF
- NEXT
- ArobasFound = 0
- FOR I = 2 TO LEN(Email$)
- IF LEFT$(MID$(Email$, I), 1) = "@" THEN
- ArobasFound = ArobasFound + 1
- IF ArobasFound = 1 THEN AfterArobas = I
- END IF
- NEXT
- IF ArobasFound <> 1 THEN
- IsEmail = 0
- EXIT FUNCTION
- END IF
- AfterArobas = AfterArobas + 2
- WHILE ((AfterArobas <= LEN(Email$)) AND (LEFT$(MID$(Email$, AfterArobas), 1) <> "."))
- AfterArobas = AfterArobas + 1
- WEND
- IF ((AfterArobas >= LEN(Email$)) OR (LEFT$(MID$(Email$, AfterArobas), 1) <> ".")) THEN
- IsEmail = 0
- EXIT FUNCTION
- END IF
- IsEmail = 1
- END FUNCTION
on obtiendra le résultat suivant :
Courriel «abc» est valide: FALSECourriel «@» 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