TLD可能会持续多长时间?


77

我正在使用PHP开发电子邮件验证正则表达式,我需要知道TLD可能有效且仍然有效的时间。我进行了几次搜索,但找不到关于该主题的太多信息。那么一个TLD可能会持续多久?



2
正如许多相关问题所指出的那样,正则表达式的电子邮件验证充其量是可疑的。又见如stackoverflow.com/questions/201323/...
tripleee

4
拜托,拜托,请不要将自己的解决方案用于这个已解决的问题。使用PHP的内置验证或功能强大的,经过良好测试的,符合RFC的第三方库,例如is_email。请记住,真正知道电子邮件地址是否有效的唯一方法是向其发送邮件,并要求用户根据邮件的内容采取措施。
查尔斯

另外,请不要忘记TLD会定期变化,并且随着gTLD的出现,任何针对已知TLD进行验证的东西都将变得过时且难以维护。
2012年

@Charles在哪里说他在使用PHP?鉴于大多数解决方案不能使用PHP(电子邮件地址验证几乎总是在客户端进行),还有什么其他方法可以在不“滚动您自己的解决方案”的情况下进行验证。
NickG 2015年

Answers:



68

当前存在的最长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

4
现在是24 :)如果您没有wget,那么这里可以使用curl选项curl -s http://data.iana.org/TLD/tlds-alpha-by-domain.txt | tail -n+2 | wc -L
Stefan Rogin 2014年

6
这不是“可能持续多久”问题的答案-仅仅是对目前使用的最长的答案。
NickG

3
wc -L还是很容易移植的,尽管编写包含AWK功能的Awk脚本很容易tail -n+2 | wc -L。例如awk 'NR>1{ if (length($0) < max) next; longest=$0; max=length($0)} END { print max, longest }',作为额外的奖励,它还会显示最长的TLD(如果有多个相同长度的标签,则仅打印第一个TLD)。还是24XN--VERMGENSBERATUNG-PWB岁,又名.vermögensberatung。快速检查起来更容易键入的是awk 'NR>1 && length($0)>23'
Tripleee

8

-编辑-

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

-编辑结束-

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

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

这种混淆意味着您在编写处理与之相关的软件时应注意“健壮性原则”(“开发人员应认真编写与现有RFC紧密结合但接受并解析来自同等RFC的同行输入的软件。”- Wikipedia)。电子邮件地址。此外,某些软件可能会由于幼稚的假设而瘫痪,例如认为50个字符就足够了(示例)。您的200个字符的电子邮件地址在技术上可能是有效的,但是如果大多数网站或应用程序拒绝该地址,则对您没有帮助。

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

RFC 3696的原始版本确实确实说过320是最大长度,但是约翰·克兰辛(ICANN)随后接受了这一说法是错误的。”

“这产生从邮箱的结构域(255个字符)+最大长度的最大长度的简单的算术运算(64个字符)+ @符号= 320个字符,错误的,这鸭翼是在原始版本实际上记录RFC3696,它已在勘误表中更正。RFC5321实际上对256个字符的SMTP交易的路径元素有一个限制。但这包括电子邮件地址周围的尖括号,因此电子邮件地址的最大长度为254个字符。”


这是一个很好的观点,我已经考虑过这一点(我实际上早先读过这篇文章)。但是,我确实认为检查TLD长度以确保有人输入的内容不是唯一有益的something@random.adskjnadskbjads
HellaMad

1
根据RFC 2606 .localhost是保留域名和其长度为9个字符
阿维亚德

@aviad:但是.localhost和朋友可能不应该显示在有效的电子邮件地址中。我认为这就是验证的目的。
Tikhon Jelvis '02

1
@Tikhon Jelvis,同意,但是,这仍然有效。
阿维亚德

7

拉丁字母最长的是.MUSEUM(source),但是有些带有特殊字符。其中最长的是XN--CLCHC0EA0B2G2A9GCD。同样,在短时间内,可以以较高的价格预订自己的TLD,因此可能更长。


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>


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)) {
  ..
}

0

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

您无需验证电子邮件地址。如果您想让人们放慢脚步,并且对他们是否真正的人有一个想法,请添加一个验证码。如果您需要确认正常工作的电子邮件,请发送一封带有验证链接的电子邮件,他们可以打开该验证链接。如果您不限制提交的内容(例如可以发送电子邮件以进行验证的东西),则无论您是否确认该地址在技术上都是有效的,无论何时该地址都将被滥用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.