Как долго может длиться ДВУ?

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

9 ответов

Решение

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

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

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

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

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

  1. Получите последний список существующих доменов верхнего уровня от IANA
  2. Уберите первую строку, которая является длинным комментарием
  3. запуск wc считать самую длинную линию

Альтернативное использование 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 символов. Неправильно. Этот слух фактически задокументирован в исходной версии RFC3696. был исправлен из-за ошибок. На самом деле есть ограничение из RFC5321 на элемент пути SMTP-транзакции в 256 символов. Но это включает в себя угловые скобки вокруг адреса электронной почты, поэтому максимальная длина адреса электронной почты составляет 254 символа."

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

Поскольку я являюсь разработчиком.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>

Самый длинный TLD на сегодняшний день - .xn-vermgensberatung-pwb, состоит из 24 символов в Punycode и 17 символов при декодировании [vermögensberatung] . При отсутствии Punycode было бы .northwesternmutual или .travelersinsurance как на 18 символов.

Однако доменное имя, предшествующее TLD, может содержать до 63 символов, как показано здесь: http://www.thelongestdomainnameintheworldandthensomeandthensomemoreandmore.com

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

TLD может быть любой длины. Новые TLD появляются постоянно. В будущем будет больше TLD, не регулируемых организацией, которая в настоящее время регулирует большинство TLD. Мы также не будем использовать электронную почту в будущем, как сейчас. При этом сказано:

Вам никогда не нужно подтверждать адрес электронной почты. Если вы хотите замедлить людей и понять, действительно ли они люди, используйте CAPTCHA. Если вам нужно подтвердить рабочий адрес электронной почты, отправьте электронное письмо со ссылкой для подтверждения, которую они могут открыть. Если вы не ограничиваете отправку вещей, которые могут генерировать такие вещи, как отправка электронных писем для проверки, не имеет значения, подтверждаете ли вы, что адрес технически действителен, в любом случае он будет использоваться в любой момент.

Вот список доменных имен верхнего уровня:

https://data.iana.org/TLD/tlds-alpha-by-domain.txt

На сегодняшний день самый длинный в списке составляет 24 символа.

XN - VERMGENSBERATUNG-PWB

Другие вопросы по тегам