В настоящее время я работаю над «правильным» валидатором URI, и в настоящее время все сводится к проверке имени хоста; остальное не так сложно.
Я застрял на метках имен хостов IDN (то есть, содержащих Unicode; на этом этапе были декодированы возможные строки, закодированные с помощью Punycode).
Моей первой идеей было в основном одно регулярное выражение для TLD, которые не поддерживают IDN, и одно для тех, которые поддерживают. Возможно, это может быть основано на списке Mozilla доменов верхнего уровня с поддержкой IDN . Соответственно,
^[a-zA-Z0-9\-]+$
и ^[a-zA-Z0-9\-\p{L}]+$
. Однако это не идеальная ситуация, поскольку каждый регистратор IDN может решить, какие символы разрешить.
Я ищу правильную, согласованную и актуальную таблицу данных символов Unicode, разрешенных в различных TLD. Начинает казаться, что я сам должен найти все данные на сайтах российских и китайских реестров (что довольно сложно).
Поэтому, прежде чем пытаться собрать все эти данные самостоятельно, я подумал, существует ли такой список. Или есть лучшие подходы, лучшие / общие практики и т. Д.? (Я хочу, чтобы проверка была как можно более строгой.)