TLD可能有多长时间?

时间:2012-02-11 07:37:09

标签: php regex email-validation tld

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

7 个答案:

答案 0 :(得分:62)

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

答案 1 :(得分:57)

目前存在的最长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. latest list of actual existing TLDs
  2. 获取IANA
  3. 剥去第一行,这是一条长篇评论
  4. 启动wc以计算最长行
  5. 替换使用curl感谢Stefan:

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

答案 2 :(得分:8)

- 编辑 -

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

-END OF EDIT -

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

  

对最大有效电子邮件地址大小似乎存在一些混淆。大多数人认为它是320个字符(用户名为64个字符,域名为255个字符,@符号为1个字符)。其他来源建议129(64 + 1 + 64)或384(128 + 1 + 255,假设未来用户名长度翻倍)。

     

这种混淆意味着你应该注意'健壮性原则'(“开发人员应该仔细编写与现有RFC密切相关的软件,但接受并解析可能与那些RFC不一致的同行的输入。” - Wikipedia )编写处理电子邮件地址的软件时。此外,某些软件可能会因天真的假设而瘫痪,例如:认为50个字符就足够了(examples)。您的200个字符的电子邮件地址可能在技术上有效,但如果大多数网站或应用程序拒绝它,则无法帮助您。

     

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

     
    

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

         

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

  

答案 3 :(得分:7)

拉丁字母最长的是.MUSEUM(source),但也有一些带有特殊字符。它们中最长的是XN - CLCHC0EA0B2G2A9GCD。此外,在短时间内,您可以以较高的价格预订自己的顶级域名,因此可能会更长。

答案 4 :(得分:0)

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

<?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('|');
?>

您可以在行动here中看到它。

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

$tlds=getTLDs('|');
if (preg_match("{([\da-z\.-]+)\.($tlds)}u",$address)) {
  ..
}

答案 5 :(得分:0)

由于我是.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>

答案 6 :(得分:0)

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

您无需验证电子邮件地址。如果您想让人们放慢脚步,并且对他们是否真正的人有一个想法,请添加一个验证码。如果您需要确认正常工作的电子邮件,请发送一封包含其可以打开的验证链接的电子邮件。如果您不限制可能产生诸如发送电子邮件进行验证之类的事情的提交,则无论您是否确认该地址在技术上都是有效的,都将被滥用。