Intereting Posts
PHP $ _REQUEST $ _GET или $ _POST HowTo PHPUnit assertFunction Клонирование и добавление DOMElement: «Неверная ошибка документа» Предупреждение: imagettftext () : Не удалось найти / открыть шрифт в /home/a2424901/public_html/index.php в строке 35 Как проверить, попадают ли определенные координаты в другой радиус координат, используя только PHP Передача необязательного параметра в PHP Функция Laravel + Jenssegers \ Mongodb: «WhereHas» и «Has» возвращает пустую коллекцию Как получить частичный результат из построителя запросов доктрины Среднее время в часах, минутах и ​​секундах в php String with Convert.ToChar (0) hash результат отличается от chr (0) в PHP при хэшировании hash_hmac Сообщения об ошибках PHP IMAP Функциональность сайта нарушена или взломана Почему FILTER_VALIDATE_URL возвращает FALSE только для этого URL-адреса? Запустить PHP-скрипт в фоновом режиме при запуске / перезагрузке Apache (Windows Server) Полоса прокрутки страницы Facebook Tab

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

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

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

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

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

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

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

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

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

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

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

    -РЕДАКТИРОВАТЬ-

    Согласно 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 символа ».

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