我的客户抱怨filter_var()
和FILTER_VALIDATE_EMAIL
选项的电子邮件地址如下:
john.doe@example.c
被接受。所以我现在的问题是:TLD至少需要多长时间?我的意思是我们知道.com
,.org
,.us
。但据我所知,.g
或.a
等顶级域名不存在。
进一步的问题是:
答案 0 :(得分:4)
为避免实施可能无法反映所有有效域名的算法,您可以使用域名上的checkdnsrr函数。
类似的东西:
$parts = explode('@', $email);
$domain = $parts[1];
if (!checkdnsrr($domain)) {
echo 'Invalid domain';
}
答案 1 :(得分:2)
现在TLD至少有两个字母。
您可以在所有可用的TLD列表中看到这一点。
来源:http://en.wikipedia.org/wiki/List_of_Internet_top-level_domains
mishu提供的解决方案是一个很好的解决方案,所以你应该使用它!
答案 2 :(得分:2)
我会做其他事情:检查域是否已解析,以及是否有MX记录。如果不是域名无法接收电子邮件,您可以拒绝该电子邮件地址。
同时检查getmxrr()
函数,不要忘记umlautdomains也称为idn或punycode域用于idn_to_ascii()
。这是一个简单的示例脚本:
$parts = explode('@', $email);
if(!getmxrr(idn_to_ascii($parts[1]))) {
echo 'Reject email address';
}