如何验证PHP中的电子邮件?

如何验证输入值是一个有效的电子邮件地址使用php5。现在我使用这个代码

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; 
     }    
} 

但它显示已弃用的错误。如何解决此问题。请帮帮我。

您可以使用filter_var()函数,它提供了许多方便的验证和清理选项。

filter_var($email, FILTER_VALIDATE_EMAIL)

> PHP Manual filter_var()
>可在PHP中使用> = 5.2.0

如果你不想改变依赖你的函数的代码,只要做:

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

注意:对于其他用途(您需要Regex),已弃用的ereg函数系列(POSIX Regex Functions)应替换为preg系列(PCRE Regex Functions)。有少量差异,阅读手册应该足够了。

更新1:正如@binaryLV所指出:

PHP 5.3.3 and 5.2.14 had a 07003 related to
FILTER_VALIDATE_EMAIL, which resulted in segfault when validating
large values. Simple and safe workaround for this is using strlen()
before filter_var(). I’m not sure about 5.3.4 final, but it is
written that some 5.3.4-snapshot versions also were affected.

这个错误已经修复。

更新2:这个方法当然会验证bazmega @ kapa作为有效的电子邮件地址,因为事实上它是一个有效的电子邮件地址。但大部分时间在互联网上,您还希望电子邮件地址有一个TLD:bazmega@kapa.com。正如这个blog post(由@Istiaque Ahmed发布的链接)建议的,您可以使用正则表达式扩充filter_var(),该正则表达式将检查域部分中是否存在点(尽管不会检查有效的TLD):

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

正如@Eliseo Ocampos指出的,这个问题只存在于PHP 5.3,in that version they changed the regex之前,现在它做这个检查,所以你不必。

http://stackoverflow.com/questions/5855811/how-to-validate-an-email-in-php

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:如何验证PHP中的电子邮件?