如何验证PHP中的电子邮件地址

我有这个功能来验证电子邮件地址:

function validateEMAIL($EMAIL) {
    $v = "/[a-zA-Z0-9_-.+]+@[a-zA-Z0-9-]+.[a-zA-Z]+/";

    return (bool)preg_match($v, $EMAIL);
}

这可以检查电子邮件地址是否有效吗?


检查电子邮件地址是否格式正确的最简单最安全的方法是使用filter_var()函数:

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    // invalid emailaddress
}

另外,您可以检查域是否定义MX记录:

if (!checkdnsrr($domain, 'MX')) {
    // domain is not valid
}

但是这仍然不能保证邮件的存在。 唯一的办法是发送确认邮件。


现在您可以轻松地阅读关于电子邮件地址验证的简单答案,如果您关心学习或仅使用快速答案并继续前进。 别往心里放。

尝试使用正则表达式验证电子邮件地址是一个“不可能”的任务。 我会尽可能地说,你所做的正则表达式是无用的。 有三个rfc关于emailaddresses,并写一个正则表达式来捕捉错误的电子邮件地址,同时没有误报是没有凡人能做的。 查看PHP的filter_var()函数使用的正则表达式的测试(失败和成功)列表。

即使内置的PHP函数,电子邮件客户端或服务器也没有正确。 仍然在大多数情况下, filter_var是最好的选择。

如果您想知道PHP(当前)用于验证电子邮件地址的正则表达式模式,请参阅PHP源代码。

如果您想了解更多关于电子邮件地址的信息,我建议您开始阅读规格说明,但我必须警告您,任何一段时间都不容易阅读:

  • rfc5322
  • rfc5321
  • rfc3696
  • rfc6531(允许unicode字符,尽管许多客户端/服务器不接受它)
  • 请注意, filter_var()仅适用于PHP 5.2。 如果你希望它能与早期版本的PHP一起工作,你可以使用PHP中使用的正则表达式:

    <?php
    
    $pattern = '/^(?!(?:(?:x22?x5C[x00-x7E]x22?)|(?:x22?[^x5Cx22]x22?)){255,})(?!(?:(?:x22?x5C[x00-x7E]x22?)|(?:x22?[^x5Cx22]x22?)){65,}@)(?:(?:[x21x23-x27x2Ax2Bx2Dx2F-x39x3Dx3Fx5E-x7E]+)|(?:x22(?:[x01-x08x0Bx0Cx0E-x1Fx21x23-x5Bx5D-x7F]|(?:x5C[x00-x7F]))*x22))(?:.(?:(?:[x21x23-x27x2Ax2Bx2Dx2F-x39x3Dx3Fx5E-x7E]+)|(?:x22(?:[x01-x08x0Bx0Cx0E-x1Fx21x23-x5Bx5D-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';
    
    $emailaddress = 'test@gmail.com';
    
    if (preg_match($pattern, $emailaddress) === 1) {
        // emailaddress is valid
    }
    

    PS上面使用的正则表达式模式的注释(来自PHP源代码)。 看起来Michael Rushton有一些版权。 如上所述:“请随意使用并重新发布此代码,但请保留此版权声明。”


    你可以为此使用filter_var。

    <?php
       function validateEmail($email) {
          return filter_var($email, FILTER_VALIDATE_EMAIL);
       }
    ?>
    

    我想你可能会更适合使用PHP的内置过滤器 - 在这种情况下:

    当提供FILTER_VALIDATE_EMAIL参数时,它可以返回true或false。

    链接地址: http://www.djcxy.com/p/92935.html

    上一篇: How to validate an email address in PHP

    下一篇: Python check for valid email address?