小编典典

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

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

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


阅读 376

收藏
2020-05-26

共1个答案

小编典典

您可以使用该filter_var()功能,该功能为您提供了许多方便的验证和消毒选项。

filter_var($email, FILTER_VALIDATE_EMAIL)

如果您不想更改依赖于函数的代码,请执行以下操作:

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

注意 :对于其他用途(需要Regex的地方),不赞成使用的ereg函数族(POSIX Regex
Functions)应替换为该preg族(PCRE Regex
Functions
)。差异很小,阅读本手册就足够了。

更新1 指出:

PHP
5.3.3和5.2.14有一个与FILTER_VALIDATE_EMAIL相关的错误,当验证大值时会导致segfault。在此strlen()
之前,使用简单安全的解决方法filter_var()。我不确定5.3.4最终版,但据信某些5.3.4快照版本也受到了影响。

该错误已得到修复。

更新2
:此方法当然会验证bazmega@kapa为有效的电子邮件地址,因为实际上它是有效的电子邮件地址。但是大多数时候,在Internet上,您还希望电子邮件地址具有TLDbazmega@kapa.com
in-php/5855853#comment18460128_5855853)发布的链接)所建议的那样,您可以filter_var()使用正则表达式进行扩充,该正则表达式将检查域部分中是否存在点(尽管不会检查_有效的_ TLD):

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