我想验证类型为'的电子邮件验证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的函数,它可以接收一个参数来验证字符串是否是有效的电子邮件。它不检查域是否存在或其他什么。此外,您还可以在此处找到可用于验证的可用筛选器。
如果你需要过滤域,有一种简单的方法可以从电子邮件中提取域,并禁止那些你不想要的域。
如果你喜欢的话,你可以简单地检查请求的域是否存在。