123 votes

Comment valider un Email en PHP?

Comment puis-je valider la valeur d'entrée est une adresse email valide à l'aide de php5. Maintenant, je suis en utilisant ce code

function isValidEmail($email){ 
     $pattern = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"; 

     if (eregi($pattern, $email)){ 
        return true; 
     } 
     else { 
        return false; 
     }    
} 

mais il montre obsolète erreur. Comment puis-je résoudre ce problème. S'il vous plaît aider moi.

283voto

kapa Points 41886

Vous pouvez utiliser l' filter_var() de la fonction, ce qui vous donne beaucoup de pratique de la validation et de la désinfection des options.

filter_var($email, FILTER_VALIDATE_EMAIL)

Si vous ne voulez pas changer votre code invoqué votre fonction, il suffit de faire:

function isValidEmail($email){ 
    return filter_var($email, FILTER_VALIDATE_EMAIL);
}

Remarque: Pour d'autres utilisations (où vous avez besoin de Regex), le obsolète ereg fonction de la famille (POSIX Fonctions Regex) devrait être remplacé par l' preg de la famille (Regex PCRE Fonctions). Il y a une petite quantité de différences, de lire le Manuel devrait suffire.

Mise à jour 1: Comme l'a souligné @binaryLV:

PHP 5.3.3 et 5.2.14 avait un bug lié à FILTER_VALIDATE_EMAIL, ce qui a entraîné erreur de segmentation lors de la validation grandes valeurs. Simple et sûre solution pour cela est d'utiliser strlen() avant d' filter_var(). Je ne suis pas sûr 5.3.4 final, mais c'est écrit que certains 5.3.4-instantané versions ont également été touchés.

Ce bug a déjà été fixé.

Mise à jour 2: Cette méthode ne permet bien sûr de valider bazmega@kapa comme une adresse de courriel valide, parce qu'en fait, c'est une adresse email valide. Mais la plupart du temps sur Internet, vous aussi vous voulez l'adresse e-mail pour avoir un TLD: bazmega@kapa.com. Comme il est suggéré dans ce billet de blog (lien posté par @Istiaque Ahmed), vous pouvez compléter filter_var() avec une regex qui va vérifier l'existence d'un point dans le nom de domaine (ne vérifiera pas pour un valide TLD tout de même):

function isValidEmail($email) {
    return filter_var($email, FILTER_VALIDATE_EMAIL) 
        && preg_match('/@.+\./', $email);
}

Comme @Eliseo Ocampos a souligné, ce problème n'existe avant de PHP 5.3, dans cette version, ils ont changé la regex et maintenant, il n'cette case, si vous n'avez pas à.

9voto

Sean Kelleher Points 595

Voir les notes à http://www.php.net/manual/en/function.ereg.php:

Note:

Depuis PHP 5.3.0, la regex extension est dépréciée en faveur de l' extension PCRE. L'appel de cette la fonction sera une question de niveau e_deprecated à partir de l'avis. Voir la liste des différences pour obtenir de l'aide sur la conversion de PCRE.

Note:

preg_match(), qui utilise un Perl-compatible regular expression la syntaxe est souvent une alternative plus rapide pour ereg().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X