我想根据他们输入的域验证电子邮件.正在检查最后一个域为.com


I want to validate email depending on the domain they enter. Am checking for last domain as .com

我想验证类型为'的电子邮件验证abc@xyz.com.com'如果输入的域名无效,则应显示错误消息。非常感谢你的帮助。

我发现尝试彻底验证电子邮件地址工作量太大,而且我倾向于使用类似于/''A[^@]+@[^@]+''z/的东西。无论哪种方式,您都必须发送一封确认电子邮件,以验证地址是否正在使用。

另请参阅本页,了解如何为电子邮件地址编写正则表达式。

此外,我认为在很多情况下,当用户键入错误的电子邮件地址时,他们仍然会以有效的格式键入地址(除此之外,恶意用户总是可以写例如。example@example.com并逃脱惩罚)

我认为您首先需要通过regexp验证电子邮件,然后查询DNS以查看电子邮件地址的主机部分是否有效。下面是进行这种检查的示例代码。

/**
 * Checks validity of given email addess
 * Also checks domain name for validity via DNS
 *
 * @param string $email
 * @return boolean
 */
function checkEmailValididty($email){
    $isValid = false;
    if(filter_var($email, FILTER_VALIDATE_EMAIL)){
        $host = substr($email, strpos($email, '@') + 1);
        if(function_exists('getmxrr') and getmxrr($host, $mxhosts) != false){
            $isValid = true;
        }
        elseif(gethostbyname($host) != $host){
            $isValid = true;
        }
    }
    return $isValid;
}

在@operator之前检查用户名非常容易,但我认为,我们无法检查域名是否有效。因为,你知道今天成千上万的领域。明天,任何组织或任何其他组织都会添加更多的域,那么我们该如何检查。

唯一的问题是,我们可以限制长度。

如果我错了,请纠正我。我将感谢你的帮助。。非常感谢。

好的,我不知道为什么这里的大多数人都跳过这个,但有一个名为filter_var的函数,它可以接收一个参数来验证字符串是否是有效的电子邮件。它不检查域是否存在或其他什么。此外,您还可以在此处找到可用于验证的可用筛选器。

如果你需要过滤域,有一种简单的方法可以从电子邮件中提取域,并禁止那些你不想要的域。

如果你喜欢的话,你可以简单地检查请求的域是否存在。