La validation des courriels est un des problèmes les plus complexe à mettre en oeuvre lorsqu'on envoie un formulaire. Et pour cause, il faut tenir compte des règles suivantes :
- 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 C++ suivant, vous trouverez la réponse que vous souhaitez :
- #include <iostream>
- #include <string.h>
-
- char * BoolToString(bool value) {
- switch(value) {
- case false:return "false";
- case true:return "true";
- }
- }
-
- bool IsEmail(const char * Email) {
- unsigned int ArobasFound,AfterArobas=0,I;
- if(strlen(Email) == 0) return false;
- for(I = 0; I < strlen(Email); I++) {
- switch(Email[I]) {
- case ' ':case '\t':case '\n':case '\\r':
- case '(':case ')':case ':':case ',':case '/':case '\\':case '\"':
- case '~':case '`':case '!':case '#':case '$':case '%':case '^':
- case '&':case '*':case '+':case '=':case '[':case ']':case '{':
- case '}':case '|':case '?':case '<':case '>':
- return false;
- }
- }
-
- for(ArobasFound = 0, I = 1; I < strlen(Email); I++) if(Email[I] == '@') {
- ArobasFound++;
- if(ArobasFound == 1) AfterArobas = I;
- }
- if(ArobasFound!=1) return false;
- AfterArobas += 2;
- while ((AfterArobas < strlen(Email)) && (Email[AfterArobas] != '.')) AfterArobas++;
- if((AfterArobas >= strlen(Email) - 1) || (Email[AfterArobas] != '.')) return false;
- else return true;
- }
-
- int main()
- {
- std::cout << "Courriel «abc» est valide: " << BoolToString(IsEmail("abc")) << std::endl;
- std::cout << "Courriel «@» est valide: " << BoolToString(IsEmail("@")) << std::endl;
- std::cout << "Courriel «@abc.abc» est valide: " << BoolToString(IsEmail("@abc.abc")) << std::endl;
- std::cout << "Courriel «abc@gladir.com» est valide: " << BoolToString(IsEmail("abc@gladir.com")) << std::endl;
- std::cout << "Courriel «abc@@gladir.com» est valide: " << BoolToString(IsEmail("abc@@gladir.com")) << std::endl;
- std::cout << "Courriel «abc@gl][adir.com» est valide: " << BoolToString(IsEmail("abc@gl][adir.com")) << std::endl;
- return 0;
- }
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
Dernière mise à jour : Mardi, le 24 novembre 2015