为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

慕莱坞7535251 2019-06-25 14:44:14

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

如何验证输入值是使用php 5的有效电子邮件地址。现在我正在使用以下代码

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

但它显示了不推荐的错误。我怎样才能解决这个问题。请帮帮我。


查看完整描述

3 回答

?
胡说叔叔

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

filter_var($email, FILTER_VALIDATE_EMAIL)

如果您不想更改依赖于您的函数的代码,只需:

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

*对于其他用途(在需要Regex的地方),不推荐使用ereg函数族(POSIX Regex函数)应由preg家庭(PCRE Regex函数)。差别很小,阅读“手册”就足够了。

更新1*正如@binaryLV:

PHP 5.3.3和5.2.14有一个虫虫与Filter_Value_Email相关,这会导致在验证大值时出现分段错误。这方面的简单和安全的解决办法是使用strlen()以前filter_var()..我不确定5.3.4的最终版本,但据报道,一些5.3.4快照版本也受到了影响。

这个bug已经修好了。

更新2这个方法当然会验证bazmega@kapa作为一个有效的电子邮件地址,因为实际上它是一个有效的电子邮件地址。但在大多数情况下,在互联网上,你也希望电子邮件地址有一个TLD:bazmega@kapa.com..如此所示博客帖子(链接)@伊斯塔克·艾哈迈德),你可以增加filter_var()使用将检查域部件中是否存在点的正则表达式(不检查有效但TLD):

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

@Eliseo Ocampos指出,这个问题只存在于PHP 5.3之前,在那个版本中,他们改变了正则表达式。现在它做了这个检查,所以你不必这样做。


查看完整回答
反对 回复 2019-06-25
?
叮当猫咪

http:/www.php.net/手册/en/function.ereg.php:

Note:

在PHP5.3.0中,regex扩展被弃用于PCRE扩展..调用此函数将发出一个E_DUPDATE通知。看见差异清单有关转换为PCRE的帮助。

Note:

preg_match(),它使用与Perl兼容的正则表达式语法,通常是Ereg()更快的替代方法。


查看完整回答
反对 回复 2019-06-25
?
慕用2447696

这是一个旧的帖子,但我将分享我的解决方案,因为这里没有人提到一个问题之前。


新的电子邮件地址可以包含utf-8字符或特殊域名,如.live, .news等。


此外,我还发现一些电子邮件地址可以是Cyrilic和所有情况下的标准regex或filter_var()都会失败。


这就是为什么我想出了一个解决方案:


function valid_email($email) 

{

    if(is_array($email) || is_numeric($email) || is_bool($email) || is_float($email) || is_file($email) || is_dir($email) || is_int($email))

        return false;

    else

    {

        $email=trim(strtolower($email));

        if(filter_var($email, FILTER_VALIDATE_EMAIL)!==false) return $email;

        else

        {

            $pattern = '/^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD';

            return (preg_match($pattern, $email) === 1) ? $email : false;

        }

    }

}

这个功能非常适合所有情况和电子邮件格式。


查看完整回答
反对 回复 2019-06-25

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信