Как долго может быть TLD?

Я работаю над регулярным выражением проверки подлинности электронной почты на PHP, и мне нужно знать, как долго может быть TLD и по-прежнему действителен. Я сделал несколько поисков, но не смог найти много информации по этой теме. Итак, как долго может быть TLD?

Ответ 1

DNS допускает максимум 63 символа для отдельной метки.

Ответ 2

Самый длинный TLD в настоящее время составляет 24 символа и может быть изменен. Максимальная длина TLD, указанная RFC 1034, составляет 63 октета.

Чтобы получить длину самого длинного существующего TLD:

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

Вот что делает эта команда:

Альтернативное использование curl благодаря Stefan:

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

Ответ 3

-Edit -

Согласно RFC 2606.localhost зарезервировано имя домена и его длина составляет 9 символов. Это самый длинный, о котором я знаю.

-END OF EDIT -

Однако, я думаю, что вы должны заботиться о длине адреса электронной почты, а не только о длине 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 в элементе пути транзакции SMTP, состоящем из 256 символов, но это включает скобки вокруг адреса электронной почты, поэтому максимальная длина адреса электронной почты составляет 254 символа."

Ответ 4

Самый длинный с латинскими буквами -.MUSEUM(источник), но есть некоторые со специальными символами. Самый длинный из них - XN - CLCHC0EA0B2G2A9GCD. Кроме того, за короткое время можно будет зарезервировать свой собственный TLD по высокой цене, и поэтому будет возможно быть длиннее.

Ответ 5

Это код 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)) {
  ..
}

Ответ 6

Поскольку я являюсь разработчиком .net, ниже приводится представление сценария java для определения самого длинного TLD, доступного в настоящее время. Это вернет длину самого длинного TLD, который вы сможете использовать в своем RegEx.

пожалуйста попробуйте следующий фрагмент кода

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>