Verificateur du format de l'email

Soyez le premier à donner votre avis sur cette source.

Vue 16 550 fois - Téléchargée 496 fois


Description

Je n'ai pas vérifier si qq1 avait déja déposé une source qui fait ca mais bon j'en ai fait une vite fait pour mon ami VBEdit :)

La fonction renvoi vrai si l'email est valide sinon faux.

!!! REMARQUE:

!!! Et pour les petits malins qui vont me sortir: "oui y a RegExp(....)" je ne pense pas qu'il soit trés modulable dans le manière de coder et qu'il n'ont rien a foutre ici car j'ai autre chose a foutre que leur expliquer que si je sort un code aussi long c pour ca portabilité et non pour son optimisation !!!

!!! De plus par rapport à la rapidité : comme excuse c'est un peu merdique.
Je ne pense pas qu'a l'oeil nu pour une simple vérification d'email dans un formulaire, on voit rééllement la différence. !!!

Donc pour les newbees qui viennent juste pour sortir leurs nouvelle lecons de javascript avec leurs nouvelles fonctions: je dis TG.

Et pour ce qui concerne la norme W3C allez vous plaindre à microsoft, netscape, et mac qui n'ont pas l'air d'avoir le même point de vue à se sujet !

Pensez du jour: "Derrière un code qui semblerait obsolete peut se cacher un très grand développeur... mais derrière un code optimisé, peut se cacher aussi une grosse merde...
On n'a pas toujours le choix dans le developpement de ses applications...
Donc réflechir à 2 fois avant de sortir des commentaires."

Source / Exemple :


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

function verifEmail(mail) {

  /*** Début de déclaration de variable ***/
  //var de retour boolean true ou false
  var ret = true;
  //var où l'on stock le caractère courant au fur et a mesure de l'analyse
  var car = "";
  //var où l'on stock le caractère place avant le @
  var carAfter = "";
  //var où l'on stock le caractère place après le @
  var carBefore = "";
  //var où l'on stock le nombre de caractères total
  var nbrcar = mail.length;
  //var où l'on stock le nombre de @ trouvé
  var nbrarobase = 0;
  //var où l'on stock le nombre de . trouvé
  var nbrpoint = 0;
  //var définissant les caractères authorisés
  var goodcar = "@0123456789.-_abcdefghijklmnopqrstuvwxyz";
  /*** Fin de déclaration de variable ***/

  /*** Début de boucle de l'analyse ***/
  for(cnt=0;cnt<nbrcar;cnt++) {

    //Récupération du caractère courant
    var car = mail.substr(cnt,1);

    /** Début de l'analyse du caractère courant **/
    //Si le caractère est authorisé
    if(goodcar.indexOf(car) >= 0) {

      //On initialise les variables carAfter et carBefore à vide
      carAfter = "";
      carBefore = "";

      /* Début de l'analyse du @ */
      //Si le caractère est @
      if(car == "@") {

        //Si le @ n'est pas le premier
        if((cnt-1) >= 0) {

          //Récupération du caractère placé avant le @
          carBefore = mail.substr((cnt-1),1);
        }

        //Si le @ n'est pas le dernier
        if((cnt+1)<nbrcar) {

          //Récupération du caractère placé après le @
         carAfter = mail.substr((cnt+1),1);
        }

        //Si toutes les condition de @ sont respectées
        //conditions:
        //    - cnt>0                 : n'est pas placé en première position
        //    - nbrarobase==0   : est unique
        //    - cnt<(nbrcar-4)     : se trouve à une position max de 5 avant la fin
        //      (sachant que les domaines les plus petit sont : a.fr par ex.)
        //    - !(carBefore==".") : qu'il n'y est pas de . avant le @
        //    - !(carAfter==".")   : qu'il n'y est pas de . après le @
        //    - !(carBefore=="-") : qu'il n'y est pas de - avant le @
        //    - !(carAfter=="-")   : qu'il n'y est pas de - après le @
        //    - !(carBefore=="_") : qu'il n'y est pas de _ avant le @
        //    - !(carAfter=="_")   : qu'il n'y est pas de _ après le @
        if(cnt>0 && nbrarobase==0 && cnt<(nbrcar-4) && !(carBefore==".") && !(carAfter==".") && !(carBefore=="-") && !(carAfter=="-") && !(carBefore=="_") && !(carAfter=="_")) {

          //On incrémente le @
          nbrarobase++;
        } else {

         //Affectation Faux à la var de retour
         ret = false;
         //On sort de la boucle 
         break;
        }
      }
      /* Fin de l'analyse du @ */

      /* Début de l'analyse du . */
      //Si le caractère est .
      if(car == ".") {

        //Si le . n'est pas le premier
        if((cnt-1) >= 0) {

          //Récupération du caractère placé avant le .
          carBefore = mail.substr((cnt-1),1);
        }

        //Si le . n'est pas le dernier
        if((cnt+1)<nbrcar) {

          //Récupération du caractère placé après le .
         carAfter = mail.substr((cnt+1),1);
        }

        //Si toutes les condition de @ sont respectées
        //conditions:
        //    - cnt>0                 : n'est pas placé en première position
        //    - cnt<(nbrcar-2)     : se trouve à une position max de 3 avant la fin
        //      (sachant que les domaines les plus petit sont : a.fr par ex.)
        //    - !(carBefore==".") : qu'il n'y est pas de . avant le .
        //    - !(carAfter==".")   : qu'il n'y est pas de . après le .
        //    - !(carBefore=="-") : qu'il n'y est pas de - avant le .
        //    - !(carAfter=="-")   : qu'il n'y est pas de - après le .
        //    - !(carBefore=="_") : qu'il n'y est pas de _ avant le .
        //    - !(carAfter=="_")   : qu'il n'y est pas de _ après le .
        if(cnt>0 && cnt<(nbrcar-2) && !(carBefore==".") && !(carAfter==".") && !(carBefore=="-") && !(carAfter=="-") && !(carBefore=="_") && !(carAfter=="_")) {

          //On incrémente le .
          nbrpoint++;
        } else {

          //Affectation Faux à la var de retour 
          ret = false;
          //On sort de la boucle 
          break;
        }
      }
      /* Fin de l'analyse du . */

    } else {

      //Affectation Faux à la var de retour 
      ret = false;
      //On sort de la boucle 
      break;
    }
    /*** Fin de l'analyse du caractère courant ***/
  }
  /*** Fin de boucle de l'analyse ***/

  /*** Début de l'analyse du nombre de @ et de . ***/
  //Si il n'y a aucun @ et aucun .
  //Si le 1er et le dernier caractère est .
  //Si le 1er et le dernier caractère est -
  //Si le 1er et le dernier caractère est _
  if(nbrarobase == 0 || nbrpoint == 0 || mail.substr(0,1) == "." || mail.substr(0,1) == "-" || mail.substr(0,1) == "_" || mail.substr((nbrcar-1),1) == "." || mail.substr((nbrcar-1),1) == "-" || mail.substr((nbrcar-1),1) == "_") {

    //Affectation Faux à la var de retour 
    ret = false;
  }
  /*** Fin de l'analyse du nombre de . et de @ ***/

  //Renvoi de la valeur de la var de retour
  return ret;
}
/**** Fin de fonction : verifEmail ****/

Conclusion :


Cette fonction peut aussi ce mettre dans Flash 5 et Flash 6 (en action script)

appel :

if(verifEmail("account@domain.com")) {
alert("mail ok");
} else {
alert("mail error");
}

Dans le zip un page de test disponible pour les comparatifs du code de samgoa et du mien.
le 1er c le mien le 2eme c le sien.
Bon travail samgoa :)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

120120
Messages postés
5
Date d'inscription
lundi 28 mars 2005
Statut
Membre
Dernière intervention
6 janvier 2010
-
effectivement avec l'ip ça passe :p

voici une méthode (pas encore finalisé) pour tester un mail via PEAR :

    function checkEmail( $email, $srv_mail )
    {
        // checks proper syntax
        $regexp = "^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$";

        if ( !eregi( $regexp, $email ) )
        {
            echo $this->status_div( 1, "Problème de formatage de l'adresse Email !!!" );
            return false;
        }
        // gets domain name
        list( $username, $domain ) = split( '@', $email );
        // checks for if MX records in the DNS
        $mxhosts = array();
        // créer l'objet
        require ( "Net/Ping.php" );
        $ping = Net_Ping::factory();
        // exécuter la commande ping sur l'hôte et afficher la réponse
        if ( !PEAR::isError( $ping ) )
        {
            $response = $ping->ping( $srv_mail );
            // if (eregi('error',$response)) return false;
            if ( PEAR::isError( $response ) )
            {
                echo $this->status_div( 1, "Problème pour joindre le server mail" );
                return false;
            }
            return array( $email );
        }
        return false;
    }


Bonne journée
apxa
Messages postés
188
Date d'inscription
mercredi 15 mai 2002
Statut
Membre
Dernière intervention
25 avril 2009
-
Salut,
A l'époque où j'ai posé la source les expr reg n'étaient pas vraiement au point sur tous les navigateurs.
Ceci dit maintenant ce n'est plus la cas on peut effectivement faire une bonne expr reg pour cela.

si j'ai le temps j'en poserais une. Completer ce contrôle du coté serveur peut aussi s'avérer très utile pour la validité des domaines ou IP.

Essayes d'inclure dans ta regexp ce cas la : email@10.24.134.17

Have Fun ;)
120120
Messages postés
5
Date d'inscription
lundi 28 mars 2005
Statut
Membre
Dernière intervention
6 janvier 2010
-
Bonjour,

Merci pour la source, mais une petite question persiste,

Lorsque j'essaie de renseigner ce type de mail < toto@toto.nccsd >, le mail est validé, alors que jusqu'à aujourd'hui il n'est pas possible de renseigner un suffixe de plus de trois caractères.

Donc $regexp = "^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$"; (désolé) mais cela à le mérite de fonctionner.

Bonne journée
oufben
Messages postés
17
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
2 mai 2007
1 -
une petite remarque cependant...
Si vraiment on veut titiller jusqu'au bout la vérif...
Je suis peut-etre bigleu mais, je n'ai pas vu dans ton code de vérification de la longueur maximale de l'email, car il me semble bien que cette longueur est limitée !
Ainsi, si je rentre une email valide mais de 5000 caracteres dans ta vérif, elle va passer, a moins encore une fois , que j'ai raté qqch lol ;)
oufben
Messages postés
17
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
2 mai 2007
1 -
Mise a part le fait que je n'aime pas l'utilisation du break a tout bout de champ dans une boucle (je titille :P ), le code est impecc ^^

Bravo ^^

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.