84

我正在使用 PHP 中的电子邮件验证正则表达式,我需要知道 TLD 可能存在多长时间并且仍然有效。我进行了一些搜索,但找不到有关该主题的太多信息。那么一个顶级域名可能有多长?

4

8 回答 8

83

DNS 允许单个标签最多包含 63 个字符。

于 2012-02-11T09:50:43.987 回答
75

当前存在的最长 TLD 为 24 个字符,并且可能会发生变化。RFC 1034指定的最大 TLD 长度为 63 个八位字节。

要获得最长的现有 TLD 的长度:

wget -qO - http://data.iana.org/TLD/tlds-alpha-by-domain.txt | tail -n+2 | wc -L

这是该命令的作用:

  1. IANA获取实际现有 TLD 的最新列表
  2. 去掉第一行,这是一个很长的注释
  3. 启动wc以计算最长的线

curl感谢 Stefan 的替代使用:

curl -s http://data.iana.org/TLD/tlds-alpha-by-domain.txt | tail -n+2 | wc -L
于 2014-02-26T10:28:43.167 回答
8

-编辑-

根据 RFC 2606 .localhost 是保留域名,长度为 9 个字符。这是我所知道的最长的。

-编辑结束-

但是,我认为您应该关心电子邮件地址的长度,而不仅仅是 TLD 的长度。以下是这篇文章的引述。电子邮件地址长度为 254 个字符:

最大有效电子邮件地址大小似乎有些混乱。大多数人认为它是 320 个字符(用户名 64 个字符 + 域 255 个字符 + @ 符号 1 个字符)。其他来源建议使用 129 (64 + 1 + 64) 或 384 (128+1+255,假设用户名将来会加倍)。

这种混淆意味着您编写处理与电子邮件地址。此外,某些软件可能会因幼稚的假设而瘫痪,例如认为 50 个字符就足够了(示例)。您的 200 个字符的电子邮件地址在技术上可能是有效的,但如果大多数网站或应用程序拒绝它,这将无济于事。

当前的实际最大电子邮件长度为 254 个字符:

RFC 3696的原始版本确实说 320 是最大长度,但John Klensin (ICANN)随后承认这是错误的。”

“这源于域的最大长度(255 个字符)+ 邮箱的最大长度(64 个字符)+ @ 符号 = 320 个字符的简单算术。错误。这个谣言实际上记录在RFC3696的原始版本中。它已在勘误表中更正。实际上,RFC5321对 256 个字符的 SMTP 事务的路径元素进行了限制。但这包括电子邮件地址周围的尖括号,因此电子邮件地址的最大长度为 254 个字符。

于 2012-02-11T07:47:20.393 回答
8

拉丁字母最长的是 .MUSEUM (来源),但也有一些带有特殊字符。其中最长的是 XN--CLCHC0EA0B2G2A9GCD。此外,在短时间内,可以以高价保留自己的 TLD,因此可以更长。

于 2012-02-11T08:11:34.193 回答
2

由于我是一名 .net 开发人员,因此以下是确定当前可用的最长 TLD 的 java 脚本表示。这将返回您可以在 RegEx 中使用的最长 TLD 的长度。

请尝试以下代码片段

function getTLD() {
    var length = 0;
    var longest;
    var request = new XMLHttpRequest();

    request.open('GET', 'http://data.iana.org/TLD/tlds-alpha-by-domain.txt', true);
    request.send(null);
    request.onreadystatechange = function () {
        if (request.readyState === 4 && request.status === 200) {
            var type = request.getResponseHeader('Content-Type');
            if (type.indexOf("text") !== 1) {
                var tldArr = request.responseText.split('\n'); 
                tldArr.splice(0, 1);

                for (var i = 0; i < tldArr.length; i++) {
                    if (tldArr[i].length > length) {
                        length = tldArr[i].length;
                        longest = tldArr[i];
                    }
                } 

                console.log("Longest >> " + longest + " >> " + length);
                return length;
            }
        }
    }
}
<button onclick="getTLD()">Get TLD</button>

于 2019-08-18T09:47:27.363 回答
0

这是PHP获取最新垂直条分隔的UTF-8TLD 列表以直接在正则表达式中使用的代码:

<?php 
  function getTLDs($separator){
    $tlds=file('http://data.iana.org/TLD/tlds-alpha-by-domain.txt');
    array_shift($tlds); // remove heading comment
    usort($tlds,function($a,$b){ return strlen($b)-strlen($a); }); // sort from longest to shortest
    return implode($separator,array_map(function($e){ return idn_to_utf8(trim(strtolower($e))); },$tlds));
  }
  echo getTLDs('|');
?>

要匹配主机名,您可以像这样使用它:

$tlds=getTLDs('|');
if (preg_match("{([\da-z\.-]+)\.($tlds)}u",$address)) {
  ..
}
于 2017-01-29T15:42:23.487 回答
0

TLD 可以是任何长度。新 TLD 一直在发生。未来将有更多的 TLD 不受目前监管大多数 TLD 的实体的监管。我们将来也不会像现在那样使用电子邮件。那说:

您无需验证电子邮件地址。如果您想让人们放慢速度并了解他们是否真的是人类,请加入验证码。如果您需要确认有效的电子邮件,请发送一封电子邮件,其中包含他们可以打开的验证链接。如果您不限制提交可能会生成诸如发送以进行验证的电子邮件之类的内容的提交,那么您是否确认该地址在技术上是有效的都无关紧要,无论如何它都会被滥用。

于 2020-02-11T01:08:59.467 回答
0

迄今为止最长的 TLD 是.xn--vermgensberatung-pwb,在 Punycode 中为 24 个字符,在解码时为 17 个[vermögensberatung]。如果没有 Punycode,它将是18 个字符的.northwesternmutual.travelersinsurance

但是,在 TLD 之前的域名最长可达 63 个字符,如下所示:http ://www.thelongestdomainnameintheworldandthensomeandthensomemoreandmore.com

于 2021-10-15T16:53:57.300 回答