begin process at 2010 02 10 14:28:35
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > TESTER LA VALIDITÉ D'UNE ADRESSE EMAIL

TESTER LA VALIDITÉ D'UNE ADRESSE EMAIL


 Information sur la source

Note :
5,5 / 10 - par 2 personnes
5,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Niveau :Débutant Date de création :04/07/2003 Date de mise à jour :04/07/2003 16:59:47 Vu :13 528

Auteur : samgoa

Ecrire un message privé
Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note

 Description

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

  • // 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
// 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?      


 Sources de la même categorie

Source avec Zip MOOTABLEAU par Miky76
Source avec Zip CALCULER VOTRE IMC par lesnouesremy
CONSOLE DOS par djebbipgm
Source avec Zip PLUGIN JQUERY ARTE: AJOUTER DU TEMPS REEL SUR VOS PAGES WEB par arthurobriot
FAIRE UN FILTRE DES VILLES par scropfi01

Commentaires et avis

Commentaire de apxa le 04/07/2003 10:15:06

Manque encore quelques controls (daniel.durant.@test.fr.st, durant@.fr.st, .durant@test.fr.st) fait bien tes vérifies avant de publier...
Et comme on m'a mis n'oublie pas les commentaires ;)

Commentaire de samgoa le 04/07/2003 11:15:43

ça y est, c'est corrigé tout les durand peuvent mettre leur adresse mail  :)

j'ai commenté (mais je ne suis pas très fort dans les commentaires)

Commentaire de apxa le 04/07/2003 11:58:56

Bon allez courage il te manque ca : -duran.t@fs.fr.st

Commentaire de apxa le 04/07/2003 11:59:51

Ca s'allonge ca s'allonge :p

Commentaire de apxa le 04/07/2003 12:03:25

Allez et puis ca : durant@-ds.fr, durant-@ds.fr

Commentaire de apxa le 04/07/2003 12:25:48

je n'ai po regarde pour le _ mais bon je te fait confiance je refait les verification sur le mien pour l'instant sans tes corrections et sans les commentaires tu gagnes 7 ligne :p

Commentaire de samgoa le 04/07/2003 16:12:46

J'en ai perdu quelques une avec les correction mais ça a l'aire de marcher avec  durant@-ds.fr, _durant@ds.fr,  durant_@ds.fr etc...

et le double tiret -- genre  durant@fs--fr.fr ou  dur--ant@ds.fr ???

il me faudrait la norme la dessus parce que là je commence à m'enbrouiller

Sinon, je ne fait pas un courcour du moins de ligne, mais plus du moins de temps procésseur (dès qu'une erreur est détectée, il ne se passe quasiment plus rien) l'algo peut-être réutilisé à l'arrivé de la requête par le serveur

Commentaire de samgoa le 04/07/2003 16:19:53

bon, après vérif on a le même nombre de ligne lol (52)

Commentaire de apxa le 04/07/2003 16:44:30

Non valide :
durant@.fr
.@test.fr
d..durant@test.fr
.durant@test.fr
durant.@test.fr
durant@test.fr.
idem avec le - et _
etc...
ui enfin de compte on arrive quasi au meme nombre mais bon c bien qd meme ;)
tu sais le temps processeur tu le compte pas il est trop faible dans tout les cas :p

Commentaire de samgoa le 04/07/2003 17:06:09

Allez 49 lignes est pis c'est tout, j'espère que l'on à fait le tour.

Commentaire de apxa le 04/07/2003 18:43:12

avec une reduction au max des mise a la ligne et des accolades on obtient:
36 lignes pour les deux.
1605 caractères pour le tiens
1341 caractère pour le mien
sur des grosses quantitée de mail a vérifier (cad &gt; 1000) on commence a voir des différences de rapidités:
&lt; 1000 mail : +/- egal
&gt; 1000 mail : le tiens plus rapide
voila voila...
conclusion les deux se valent pour une utilisation classique.
Bon travail :)

ps: Tu peux voir dans mon zip.

Commentaire de zut69 le 23/02/2005 16:46:25

Bonjour,
J'ai un problème: je voudrais inclure ton super code pour l'inscription à l'espace membre de mon site, mais je sais pas trop comment l'inclure au code ci-dessous,
dois-je l'insérer dans cette page? si oui ou? sinon, sur comment faire ma page? comment modifier celle-ci?

Bon, voici mon code:
<?PHP
include ("noms_utis.inc.php");

$titre = "Site à accès protégé";

if ($nom == "" || $passe == "")
{ include ("html.inc.php");
  echo "<H2>Site à accès protégé</H2>";
  echo "<FORM ACTION=$PHP_SELF METHOD='POST'>";
  echo "Identifiez-vous, svp :<p>";
  echo 'Votre Email : <INPUT TYPE="text" ';
  echo 'NAME="nom" VALUE=""><p>Mot de passe : ';
  echo '<INPUT TYPE="password" NAME="passe"><p>';
  echo '<INPUT TYPE="submit" VALUE="OK">';<br>
  echo "Si vous n'êtes pas inscrits, <a href='ajouter.php'>cliquez ici</a>.";
  echo '</FORM></BODY></HTML>';
}
else
{ $fp = fopen (UTILISATEURS, "r");
  while ($z = fgets($fp, 1000))
  { $q = explode(",", $z);
    if ($nom == $q[0] && md5($passe) == rtrim($q[1]))
    { fclose($fp);
      echo "<h3>Bienvenue dans mon site Web </h3>";
      echo "blablablablablablablablablablablablabla";
      echo "blablablablablablablablablablablablabla";
      exit;
    }
  }
  echo "<h3>Mauvais login ou mauvais mot de passe, si vous n'êtes pas inscrit, <a href='ajouter.php'>inscrivez-vous</a> !</h3>";
  fclose($fp);
}
?>

Merci
François

Commentaire de GilDev1 le 04/06/2006 09:17:43

sa marche pas du tout BRAVO

Commentaire de sivispacem le 06/10/2006 17:38:00

C'est un peu fastidieux comme méthode et pas suffisant.
A mon avis il vaut mieux créer un modèle, et refuser ce qui sort du modèle.
Exemple : (insufisant pour la RFC 2822)
function bSyntaxeEmail(sMail)
{
var re=/^[a-z\d]+((\.|-|_)[a-z\d]+)*@((?![-\d])[a-z\d-]{0,62}[a-z\d]\.){1,4}[a-z]{2,6}$/gi;
return (sMail.match(re)==sMail)&&(sMail.substr(sMail.lastIndexOf("@")).length<=256);
}

Pour les règles, consulter la
RFC 2822 http://abcdrfc.free.fr/rfc-vf/rtf/rfc2822.rtf
et la
RFC 1034 (http://abcdrfc.free.fr/rfc-vf/rfc1034.html)
Pour "Le Format des Messages de l'Internet" et
"DNS - Domain Name Server - Système de résolution des
adresses Internet numériques (pour la couche IP) et des
adresses symboliques (pour l'Homme).

Commentaire de spidermario le 27/10/2006 21:56:03

Le plus simple que j'ai pu faire est
function isValidEMailAddress(e)
{
return e.match(/\w+@[A-Za-z-]{2,}\.[A-Za-z]{2,3}/);
}

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,203 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales