我的一个客户抱怨说,filter_var()
可以选择FILTER_VALIDATE_EMAIL
一个电子邮件地址,例如:
john.doe@example.c
被接受。所以我现在的问题是:TLD 至少需要多长时间?我的意思是我们知道.com
,,,.org
。.us
但据我所知,TLD 喜欢.g
或.a
不存在。
进一步的问题是:
- 他们甚至可能存在吗?
- 它们是否已经存在于现实世界 (WWW) 中?
- “单字符”TLD 有一天会在万维网中存在的可能性有多大?
我的一个客户抱怨说,filter_var()
可以选择FILTER_VALIDATE_EMAIL
一个电子邮件地址,例如:
john.doe@example.c
被接受。所以我现在的问题是:TLD 至少需要多长时间?我的意思是我们知道.com
,,,.org
。.us
但据我所知,TLD 喜欢.g
或.a
不存在。
进一步的问题是:
为避免实施可能无法反映所有有效域名的算法,您可以对域名使用checkdnsrr函数。
就像是:
$parts = explode('@', $email);
$domain = $parts[1];
if (!checkdnsrr($domain)) {
echo 'Invalid domain';
}
一个 TLD 目前至少有 2 个字母。
您可以在所有可用 TLD 的列表中看到这一点。
来源:http ://en.wikipedia.org/wiki/List_of_Internet_top-level_domains
mishu 提供的解决方案是一个很好的解决方案,所以你应该使用它!
我会做其他事情:检查域是否可以解析以及是否有 MX 记录。如果不是,则该域无法接收电子邮件,您可以拒绝该电子邮件地址。
还要检查该getmxrr()
功能,不要忘记用于idn_to_ascii()
. 这是一个简单的示例脚本:
$parts = explode('@', $email);
if(!getmxrr(idn_to_ascii($parts[1]))) {
echo 'Reject email address';
}