php 电子邮件验证无法识别。com.com

php email validation not recognizing .com.com

下面给出问题的测试代码

如果提供的扩展名为 .com.com 的无效电子邮件将被视为有效

请帮忙解决同样的问题

提前致谢

<?php 
if(isset($_POST['submit']))
{
function validate_email($email)
  {
    $exp = "^[a-z\'0-9]+([._-][a-z\'0-9]+)*@([a-z0-9]+([._-][a-z0-9]+))+$";
      if(eregi($exp,$email))
      {
       if(checkdnsrr(array_pop(explode("@",$email)),"MX"))
        {
          return 1;
        }
        else
        {
          return 0;
        }
    }
  else
  {
    return 0;
  }    
}

    $email = $_POST['email'];   
    print $details= validate_email($email);
}

?>
<form action="" method="post">
 <h1> Email </h1>
 <input type="email" name="email">
 <button type="submit" name="submit"> SUBMIT </button> 
</form>

您可以使用

$pattern = "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i";

或只是

filter_var('email@email',FILTER_VALIDATE_EMAIL)

它怎么知道那个电子邮件地址是错误的?

一个有效的电子邮件地址已经是 "someone@company"

其中 "company" 可能是您的 Intranet 系统主机名。出于类似原因 FILTER_VALIDATE_EMAIL 不检查 "valid" TLD,因为它不知道它是否有效。

至于这一点,建议不要自己编写更具体的检查,因为在很多情况下,这些检查可能会使您的应用程序无用。

您可以使用这个正则表达式:

^([a-z\'0-9\._-]+)@([a-z0-9]+)((\.[a-z0-9]{2,3})(\.[a-z0-9]{2})|(\.[a-z0-9]{2,3}))$

与 "john.doe@gmail.com" 或 "john.doe@domain.co.uk" 配合得很好,但现在有太多不同的顶级域名可供选择,因此很难匹配所有可能性。

您应该尝试 API 电子邮件验证服务。

此致