FONCTION DE VERIFICATION DE LA SYNTAXE ET DE LA VALIDITÉ D'UNE ADRESSE EMAIL

cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008 - 30 avril 2008 à 10:04
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 - 1 mai 2008 à 00:41
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/46508-fonction-de-verification-de-la-syntaxe-et-de-la-validite-d-une-adresse-email

webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
1 mai 2008 à 00:41
+1 avec Stailer
cs_stailer Messages postés 507 Date d'inscription jeudi 28 mars 2002 Statut Membre Dernière intervention 13 mai 2009 1
1 mai 2008 à 00:22
A partir de PHP 5.2 :

if (filter_var( 'mon@mail.fr', FILTER_VALIDATE_EMAIL))
echo 'email correct';
else
echo 'email incorrect';

Il est possible de vérifier tout un tas d'autres choses et de créer ses propres filtres...
référence : http://www.php.net/filter
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
30 avril 2008 à 18:57
Hello,

en plus du reste, ça n'a rien à faire ici : mets le plutôt sur codyx.org (et cherche d'abord si ça n'existe pas déjà).
Merci.
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
30 avril 2008 à 14:29
1/ Le stripslashes() ne devrait pas se faire à l'intérieur de la fonction mais à l'extérieur. Moi je désactive mes magic_quotes sur mon serveur donc je n'ai pas besoin de ralentir l'exécution du script avec un test de la config des magic_quotes.

2/ eregi() est dépréciée et obsolète ! Utilise une fonction d'expression régulière PCRE. Dans le cas du test d'un motif d'adresse e-mail, c'est preg_match() qui fera l'affaire.

3/ Pour récupérer le domaine tu peux simplement faire un explode() sur le séparateur @

4/ Tes fonctions MYSQL n'ont rien à faire dans la fonction. Ta fonction doit juste tester si le format du paramètre est bien celui attendu. Rien de plus.

5/ Tes erreurs devraient être gérée à l'extérieur de la fonction. En renvoyant un booléen ou un entier tu peux tester à l'extérieur la valeur de retour et appliquer le bon message d'erreur (au format que tu veux d'ailleurs : html, xhtml, xml, texte bruit...)

++
amezghal Messages postés 385 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 21 août 2015 5
30 avril 2008 à 13:49
et pour windows ?
checkdnsrr n'est pas disponible dans cet OS
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
30 avril 2008 à 10:04
Salut,

Ta regex bloque BEAUCOUP de cas d'email totalement valides... Et je crois que l'intérêt d'une telle fonction serait de retourner un boolean...
Ici tu nous force à utiliser mysql, et si moi je l'utilise pas ?

J'ai refait ta fonction (sans refaire la regex, j'avais la flemme de me lire la rfc). Je dis pas que c'est mieu la hein, je dis que c'est plus propre et que ça pourrait t'aider à apprendre :)

<?php
function Email_Test($email){if (get_magic_quotes_gpc() 1) $email stripslashes($email);
if (eregi ('^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$',$email)){
$domaine = substr($email,strpos($email,'@'));return (checkdnsrr($domaine, 'MX') True || checkdnsrr($domaine, 'A') True);
}
return false;
}
?>

@+ Et bon courage :)