Регулярное выражение для проверки домена с поддержкой punycode?

Пытаюсь написать регексп для строгой валидации домена с поддержкой IDN кодировки (xn--).

На данный момент «как надо» у меня работает только проверка TLD:
[a-z]{2,6}$|(xn--)?[a-z0-9]{4,32}
т.е проверка на обычные a-z, затем на punycode (перечисление всех зарегистрированных зон пока-что опустил для упрощения)


А вот с левой частью проблемы…


Вопрос: как проверить маску, в которой некоторые символы могут быть только внутри и не рядом (дефис и точка),

но при том с поддержкой xn-- вначале или перед точкой. и чтобы каждый блок разделённый точками не превышал нужный размер…


например, должно быть false:
-aaaa

aaaa-

aa--a

--aaa

aaa--

.aaaa

aaaa.

..aaa

aa..a
должно быть true:
xn--aaaaaa

xn--a-aa.a

a-a.xn--aa

a.xn--aa.a

xn--a-aa-a
Обгуглил весь интернет, из мануалов всё очевидно, но пытаюсь встроить в общую картину, и ничего в итоге не работает.


А готовые примеры в основном «детские», мне такие не подходят. Очень важно как можно точнее определить правильность для избежания запросов DNS, куда после валидации регекспом попадает домен.


Пока остановился на обычной проверке вхождений символов, без учёта повторов и правильной длины каждого блока.


Вот мой скрипт со списком проверочных доменов (75 штук «should be false» и 10 «should be true»):
pastebin.com/7GaMDZhQ
  • Вопрос задан
  • 8463 просмотра
Решения вопроса 1
hell0w0rd
@hell0w0rd
Просто разработчик
а почему нельзя конвертировать в utf-8 и проверять?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@lehha
/^[0-9a-z][0-9a-z-]{0,62}[0-9a-z]\.xn--p1ai$/
вот для РФ. НО! Это только для проверки punycode. По правилам РФ необходимо ещё проверять и представление в кириллическом написании.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы