Tester la validité d'une adresse email

Contenu du snippet

Comme son titre l'indique, cette fonction teste la validité d'une adresse e-mail.

aaaaaa@bbbbbb.cccc

tout d'abord la fonction teste le fait qu'il n'y ait ni d'espace ' ' ni de double point '..'

ensuite s'il existe un arrobas et que le dernier point soit après l'arrobas et que ce dernier point n'a pas moins de 2 caractères ou plus de 4 caractères et que l'adresse est définie.

Alors on peut passer à la suite...

1 - la fonction test la partie aaaaaa et vérifie que les caractètes composant cette partie sont correct (_.-0123456789abcdefghijklmnopqrstuvwxyz)

2 - la fonction test la partie bbbbbb et vérifie que les caractètes composant cette partie sont correct (.-0123456789abcdefghijklmnopqrstuvwxyz)

3 - la fonction test la partie cccc et vérifie que les caractètes composant cette partie sont correct (abcdefghijklmnopqrstuvwxyz)

Dès qu'une erreur est détectée la fontion ne vérifie plus rien (s'il y a une erreur ce n'est pas la peine d'en chercher une autre!!!) et renvoi false.

si tout ce passe bien alors la fonction renvoi true.

Et voilà !!!

Source / Exemple :


// Début de fonction : testAdrMail
// Entrée : adrMail - (String) - Email à analysé.
// Renvoyé : true ou false - (Boolean) - Vrai si l'email est correct sinon Faux

function testAdrMail(adrMail) {

 // déclaration et initialisation des variables
 adrMailLength=adrMail.length; // longueur de la chaîne adrMail
 caractOk="_.-0123456789abcdefghijklmnopqrstuvwxyz"; // caratères corect d'une adresse mail
 var posArrobas=adrMail.indexOf('@',1); // position du premier Arrobas
 var posPoint=adrMail.lastIndexOf('.',adrMailLength); // position du dernier point
 var posCaractFaux=adrMail.indexOf('..',posArrobas+1); // position d'un caractère faux ('..' ou ' ')
 var caract=0; // caractère extrait de la chaîne adrMail (utilisée par les boucles while)
 var caractFaux=adrMail.charAt(0)+adrMail.charAt(posArrobas-1)+adrMail.charAt(posArrobas+1)+adrMail.charAt(posPoint-1);
 var posCaract=0; // position du caractère à extraire de la chaîne adrMail (utilisée par les boucles while)
 var posCaractOk=0; // position du caractère extrait de la chaîne adrMail (utilisée par les boucles while)
 var posCaractNon=-1;
 var retour=false; // l'adresse e-mail est considérée comme fausse au début

 // début du teste
 // s'il n'existe pas de caractère '..' alors on teste s'il existe un espace dans la chaîne adrMail
 if (posCaractFaux!=-1 || adrMail.indexOf(' ',0)!=-1 || adrMail.indexOf('--',0)!=-1 || adrMail.indexOf('__',0)!=-1) {
    posCaractFaux=0;
 }

 // Teste les points ou - ou _ au début de l'adrMail, autour de l'arrobas et autour du dernier point
 for (posCaract;posCaract<4;posCaract++) {
     caract=caractFaux.charAt(posCaract);
     posCaractNon=caractOk.lastIndexOf(caract,2);
     if (posCaractNon!=-1) {
        posCaractFaux=0;
        break;
     }
 }
 // si l'adresse mail contient au moins 1 caractère et qu'elle comporte un arrobas
 // et qu'elle comporte un point et que l'arrobas est avant le dernier point
 // et qu'elle ne contient pas de '..' ou d'espace et que après le dernier point il y est 2,3 ou 4 caractères
 // et qu'il n'y est pas de point autour de l'arrobas et que l'adresse ne commence pas par un point
 // Alors
 if (adrMailLength>0 && posArrobas!=-1 && posPoint!=-1 && posArrobas<posPoint && posCaractFaux==-1 && adrMailLength-posPoint-1>=2 && adrMailLength-posPoint-1<=4) {

    // extraction d'un caractère et teste s'il existe dans la chaîne "_.-0123456789abcdefghijklmnopqrstuvwxyz"
    // S'il n'existe pas alors posCaract=-1 donc au prochain 'tour' on passe aux autres boucles (qui ne s'effecturont pas)
    // Si il existe on continue la boucle jusqu'au caractère avant l'arrobas et on passe à la boucle while suivante

    adrMail=adrMail.toLowerCase();
    posCaract=0;

    while (posCaract<posArrobas && posCaractOk!=-1) {
          caract=adrMail.charAt(posCaract);
          posCaractOk=caractOk.indexOf(caract,0);
          posCaract++;
    }
    posCaract++; // on passe l'arrobas

    // sur le même principe qu'au dessus mais pour la partie entre l'arrobas et le dernier point
    // le test ce fait sur les caractères ".-0123456789abcdefghijklmnopqrstuvwxyz"
    // caractOk.indexOf(caract,1) on ne teste plus l'underscore
    while (posCaract<posPoint && posCaractOk!=-1) {
          caract=adrMail.charAt(posCaract);
          posCaractOk=caractOk.indexOf(caract,1);
          posCaract++;
    }
    posCaract++; // on passe le point

    // sur le même principe qu'au dessus mais pour la partie entre le dernier point et la fin
    // le test ce fait sur les caractères "abcdefghijklmnopqrstuvwxyz"
    // caractOk.indexOf(caract,13) on ne teste plus que des lettres
    while (posCaract<adrMailLength && posCaractOk!=-1) {
          caract=adrMail.charAt(posCaract);
          posCaractOk=caractOk.indexOf(caract,13);
          posCaract++;
    } // fin de la boucle while
    
    // durant le parcour de l'adresse mail si n'y avait pas de caractère interdit
    // posCaractOk a changer plusieurs fois de valeur mais na jamais eu la valeur -1
    // donc l'adresse est bonne
    if (posCaractOk!=-1) {
       retour=true;
    }
 }
 return retour; // renvoi le résultat (true ou false)
} // fin de la fonction

Conclusion :


Que pensez-vous de ma première fonction?

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.