私は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
そのコマンドの機能は次のとおりです。
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の長さだけでなく、メールアドレスの長さにも注意する必要があると思います。以下は this 記事からの引用です。電子メールアドレスの長さは254文字です。
有効な電子メールアドレスの最大サイズに関して混乱があるようです。ほとんどの人は、320文字(ユーザー名に64文字+ドメインに255文字+ @記号に1文字)と信じています。他の情報源は、129(64 + 1 + 64)または384(128 + 1 + 255、将来的にユーザー名の長さが2倍になると仮定)を示唆しています。
この混乱は、「堅牢性の原則」に注意する必要があることを意味します(「開発者は、既存のRFCに厳密に従うソフトウェアを注意深く作成する必要がありますが、それらのRFCと一致しない可能性のあるピアからの入力を受け入れて解析する必要があります」- Wikipedia )メールアドレスを扱うソフトウェアを作成するとき。さらに、いくつかのソフトウェアは、素朴な仮定、たとえば50文字で十分だと思う( examples )。 200文字のメールアドレスは技術的には有効かもしれませんが、ほとんどのWebサイトまたはアプリケーションがそれを拒否した場合には役に立ちません。
実際の最大メール長は現在254文字です。
「 RFC 3696 の元のバージョンは実際に320が最大長であると言っていましたが、 John Klensin(ICANN) その後、これが間違っていたことを受け入れました。」
「これは、ドメインの最大長(255文字)+メールボックスの最大長(64文字)+ @記号= 320文字の単純な算術演算から生じます。このカナードは、実際には RFC3696 。正誤表で修正されました。実際には、 RFC5321 からの制限があります。 256文字のSMTPトランザクションのパス要素。ただし、これにはメールアドレスを囲む角括弧が含まれているため、メールアドレスの最大長は254文字です。
ラテン文字の最長は.MUSEUM( source )ですが、特殊文字のあるものもあります。それらからの最長は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('|');
?>
実際に見ることができます here 。
ホスト名と一致させるには、次のように使用できます。
$tlds=getTLDs('|');
if (preg_match("{([\da-z\.-]+)\.($tlds)}u",$address)) {
..
}
私は.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>