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 à.