Задать вопрос

Регулярное выражение для проверки домена с поддержкой 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
  • Вопрос задан
  • 8545 просмотров
Подписаться 5 Оценить Комментировать
Решения вопроса 1
hell0w0rd
@hell0w0rd
Просто разработчик
а почему нельзя конвертировать в utf-8 и проверять?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@lehha
/^[0-9a-z][0-9a-z-]{0,62}[0-9a-z]\.xn--p1ai$/
вот для РФ. НО! Это только для проверки punycode. По правилам РФ необходимо ещё проверять и представление в кириллическом написании.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
Wanted. Санкт-Петербург
До 450 000 ₽
Wanted. Санкт-Петербург
До 120 000 ₽
Wanted. Санкт-Петербург
До 100 000 ₽
26 дек. 2024, в 23:03
500 руб./в час
26 дек. 2024, в 21:50
5000 руб./за проект
26 дек. 2024, в 21:01
10000 руб./за проект