私は現在、「適切な」URI バリデーターに取り組んでおり、現在はすべてホスト名の検証にかかっています。残りはそれほどトリッキーではありません。
私は IDN ホスト名ラベル (つまり、Unicode を含む; punycode でエンコードされた可能性のある文字列は、この時点でデコードされています) に行き詰まっています。
私の最初のアイデアは、基本的に、IDN をサポートしない TLD 用の 1 つの正規表現と、サポートする TLD 用の 1 つの正規表現でした。これはおそらく、 Mozilla の IDN 対応 TLD のリストに基づいている可能性があります。それぞれ、
^[a-zA-Z0-9\-]+$
および^[a-zA-Z0-9\-\p{L}]+$
. ただし、すべての IDN レジストラが許可する文字を決定できるため、これは理想的な状況ではありません。
私が探しているのは、さまざまな TLD で許可されている Unicode 文字の適切で一貫性のある最新のデータ テーブルです。ロシアと中国の登録サイトですべてのデータを自分で見つけなければならないように見え始めています (これは非常に困難です)。
したがって、このデータをすべて自分で収集しようとする前に、そのようなリストが既に存在するかどうか疑問に思いました. または、より良いアプローチ、ベスト/一般的なプラクティスなどはありますか? (バリデーションはできるだけ厳しくしたい。)