PHP-TLD可能会持续多久?
我正在使用PHP开发电子邮件验证正则表达式,我需要知道TLD可能有效且仍然有效的时间。 我进行了一些搜索,但找不到关于该主题的太多信息。 那么一个TLD可能会持续多久?
DNS允许单个标签最多包含63个字符。
当前存在的最长TLD为24个字符长,并可能会发生变化。 RFC 1034指定的最大TLD长度为63个八位位组。
要获取现有最长TLD的长度,请执行以下操作:
wget -qO - http://data.iana.org/TLD/tlds-alpha-by-domain.txt | tail -n+2 | wc -L
该命令的作用如下:
- 从IANA获取实际的现有TLD的最新列表
- 删除第一行,这是一个长期的评论
- 启动
wc
以计算最长的行
借助Stefan,可使用curl
进行替代:
curl -s http://data.iana.org/TLD/tlds-alpha-by-domain.txt | tail -n+2 | wc -L
-编辑-
根据RFC 2606,.localhost为保留域名,其长度为9个字符。那是我所知道的最长的。
-编辑结束-
但是,我认为您应该关心电子邮件地址的长度,而不仅仅是TLD的长度。以下是本文的引文。电子邮件地址长度为254个字符:
最大有效电子邮件地址大小似乎有些混乱。 大多数人认为它是320个字符(用户名64个字符+域255个字符+ @符号1个字符)。 其他来源建议使用129(64 + 1 + 64)或384(128 + 1 + 255,假设用户名将来会加倍)。
这种混淆意味着您在编写处理“鲁棒性原则”(“开发人员应认真编写与现有RFC紧密结合但接受并解析可能与这些RFC不一致的对等方的输入”的软件时应谨慎对待)。 电子邮件地址。 此外,某些软件可能会由于幼稚的假设而受损,例如 认为50个字符就足够了(示例)。 您的200个字符的电子邮件地址在技术上可能是有效的,但是如果大多数网站或应用程序拒绝该地址,那么它对您没有帮助。
实际的最大电子邮件长度当前为254个字符:
“ RFC 3696的原始版本确实确实说过320是最大长度,但是约翰·克兰辛(ICANN)随后接受了这是错误的。”
“这是由于域的最大长度(255个字符)+邮箱的最大长度(64个字符)+ @符号= 320个字符的简单算法而引起的。 已在勘误表中更正。RFC5321实际上对256个字符的SMTP交易的路径元素有一个限制。但这包括电子邮件地址周围的尖括号,因此电子邮件地址的最大长度为254个字符。”
拉丁字母最长的是.MUSEUM(源),但是有些带有特殊字符。 其中最长的是XN--CLCHC0EA0B2G2A9GCD。 同样,在短时间内,可以以高价预订自己的TLD,因此可能更长。
这是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('|');
?>
您可以在这里看到它的实际效果。
要匹配主机名,可以这样使用:
$tlds=getTLDs('|');
if (preg_match("{([\da-z\.-]+)\.($tlds)}u",$address)) {
..
}