Писал регулярку, для проверки доменного имени в рамках обучения:
$reg = "#^(([a-zA-Z0-9]+-?)*[a-zA-Z0-9]\.)*[a-zA-Z0-9]{2,}$#";
preg_match($reg, $domain, $res);
Опустим неточности проверки соответствия именно Доменному имени (это можно доработать).
Меня больше всего заинтересовал следующий вопрос:
Она прекрасно работает до момента, пока в домене верхнего уровня до 18ти символов, а 19+ выдают "false" почему так?
Все остальное ошибок не вызывает: поддомены в количествах до 20-30шт (больше не проверял), разной длины (до 40-50 символов), отсутствие поддоменов, пустые имена доменов, как и положено ошибку выдают и пр. Ну из логики регулярки мне это понятно.
Но как только добавляю 19ый+ символ в название домена верхнего уровня - сразу получается False.
Примеры:
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.1.rusreasreasreasreasssreasreasreasreasss.reasreasreasreasss - true
rusreasreasreasreasssreasreasreasreasss.reasreasreasreasss - true
reas
reasreas
reasss - true
reas
reasreas
reassss - false