【问题标题】:php email validation not recognizing .com.comphp电子邮件验证无法识别.com.com
【发布时间】:2018-01-29 12:54:57
【问题描述】:

下面是问题的测试代码

如果给出扩展名为 .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>

【问题讨论】:

  • 不要使用自己的电子邮件验证器。只需使用filter_var('bob@example.com', FILTER_VALIDATE_EMAIL)
  • 另外,foo@bar.com.com 在技术上是一个有效的电子邮件地址 - 某个地方的某个人拥有 com.com,子域是一回事。 user@subdomain.domain.top-level-domain 完全有效。

标签: php email email-validation


【解决方案1】:

它应该如何知道那个电子邮件地址是错误的?

有效的电子邮件地址已经是“someone@company”

其中“公司”可以是您的 Intranet 系统主机名。由于 FILTER_VALIDATE_EMAIL 不检查“有效”TLD 等原因,因为它无法知道它是否有效。

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

【讨论】:

    【解决方案2】:

    你可以使用

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

    或者只是

    filter_var('email@email',FILTER_VALIDATE_EMAIL)

    【讨论】:

      【解决方案3】:

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

      ^([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”配合良好,但现在有太多不同的 tld 可用,很难匹配所有可能性。

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

      问候

      【讨论】:

        猜你喜欢
        • 2015-03-21
        • 1970-01-01
        • 2021-12-21
        • 1970-01-01
        • 2011-09-25
        • 2017-03-19
        • 1970-01-01
        • 2017-10-12
        • 1970-01-01
        相关资源
        最近更新 更多