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