1

我的一个客户抱怨说,filter_var()可以选择FILTER_VALIDATE_EMAIL一个电子邮件地址,例如:

john.doe@example.c

被接受。所以我现在的问题是:TLD 至少需要多长时间?我的意思是我们知道.com,,,.org.us但据我所知,TLD 喜欢.g.a不存在。

进一步的问题是:

  • 他们甚至可能存在吗?
  • 它们是否已经存在于现实世界 (WWW) 中?
  • “单字符”TLD 有一天会在万维网中存在的可能性有多大?
4

3 回答 3

4

为避免实施可能无法反映所有有效域名的算法,您可以对域名使用checkdnsrr函数。

就像是:

$parts = explode('@', $email);
$domain = $parts[1];
if (!checkdnsrr($domain)) {
    echo 'Invalid domain';
}
于 2014-06-25T08:19:23.707 回答
2

一个 TLD 目前至少有 2 个字母。

您可以在所有可用 TLD 的列表中看到这一点。

来源:http ://en.wikipedia.org/wiki/List_of_Internet_top-level_domains

mishu 提供的解决方案是一个很好的解决方案,所以你应该使用它!

于 2014-06-25T08:19:43.907 回答
2

我会做其他事情:检查域是否可以解析以及是否有 MX 记录。如果不是,则该域无法接收电子邮件,您可以拒绝该电子邮件地址。

还要检查该getmxrr()功能,不要忘记用于idn_to_ascii(). 这是一个简单的示例脚本:

$parts = explode('@', $email);
if(!getmxrr(idn_to_ascii($parts[1]))) {
    echo 'Reject email address';
}
于 2014-06-25T08:52:24.893 回答