Как долго может быть TLD?
Я работаю над регулярным выражением проверки электронной почты в PHP, и мне нужно знать, как долго TLD может быть и оставаться действительным. Я сделал несколько поисков, но не смог найти много информации по этой теме. Итак, как долго может быть TLD?
5 ответов:
самый длинный TLD в настоящее время существует длиной 24 символа и может быть изменен. Максимальная длина дву, указанная RFC 1034 - это 63 октетов.
чтобы получить длину самого длинного существующего TLD:
wget -qO - http://data.iana.org/TLD/tlds-alpha-by-domain.txt | tail -n+2 | wc -L
вот что делает эта команда:
- скачать последний список реально существующих дву С IANA
- Strip первая строка, которая является длинной-иш комментарий
- запуск
wc
чтобы посчитать самую длинную строкуальтернативы с помощью
curl
спасибо Стефану:curl -s http://data.iana.org/TLD/tlds-alpha-by-domain.txt | tail -n+2 | wc -L
самый длинный с латинскими буквами. музей (источник), но есть некоторые специальные символы. Самый длинный из них-XN--CLCHC0EA0B2G2A9GCD. Кроме того, за короткое время можно будет зарезервировать свой собственный TLD по высокой цене, и поэтому можно будет быть дольше.
- EDIT -
согласно RFC 2606 .localhost-это зарезервированное доменное имя, длина которого составляет 9 символов. Это самое длинное, что я знаю.
- КОНЕЦ РЕДАКТИРОВАНИЯ -
тем не менее, я думаю, что вы должны заботиться о длине адреса электронной почты, а не только о длине TLD. Ниже приведена цитата из этой статьи. Длина адреса электронной почты составляет 254 символа:
там, кажется, есть некоторая путаница по максимальному допустимому адресу электронной почты размер. Большинство людей считают, что это 320 символов (64 символа для имени пользователя + 255 символов для домена + 1 символ для символа@). Другие источники предлагают 129 (64 + 1 + 64 или 384 (128+1+255, предполагая, что имя пользователя удваивается в длину в будущем).
эта путаница означает, что вы должны прислушаться к "принципу надежности" ("разработчики должны тщательно писать программное обеспечение, которое тесно придерживается существующих RFC, но принимает и анализирует входные данные от сверстников, которые могут быть несовместимы с этими РКС."- Википедия) при написании программного обеспечения, которое имеет дело с адресами электронной почты. Кроме того, некоторые программы могут быть искалечены наивными предположениями, например, думая, что 50 символов достаточно (примеры). Ваш 200-символьный адрес электронной почты может быть технически допустимым, но это не поможет вам, если большинство веб-сайтов или приложений отклонят его.
фактическая максимальная длина электронной почты в настоящее время составляет 254 символа:
" The оригинальная версия RFC 3696 действительно сказал 320 была максимальная длина, но Джон Кленсин (ICANN) впоследствии признал, что это было неправильно."
" это происходит из простой арифметики максимальной длины домена (255 символов) + максимальной длины почтового ящика (64 символа) + символ @ = 320 символов. Неправильный. Этот слух фактически задокументирован в оригинальной версии RFC3696. Это было исправлено в опечатках. Есть на самом деле ограничение от RFC5321 на элементе path SMTP-транзакции из 256 символов. Но это включает в себя угловые скобки по адресу электронной почты, поэтому максимальная длина адреса электронной почты составляет 254 символа."
это
PHP
код, чтобы получить актуальную вертикальную полосу разделеныUTF-8
список дву, который будет использоваться непосредственно в регулярном выражении:<?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)) { .. }