我目前正在开发一个“正确”的 URI 验证器,目前这一切都归结为主机名验证;其余的并不那么棘手。
我被困在 IDN 主机名标签上(即,包含 Unicode;此时可能的 punycode 编码字符串已被解码)。
我的第一个想法基本上是一个用于不支持 IDN 的 TLD 的正则表达式,一个用于支持 IDN 的 TLD。这可能基于Mozilla 的启用 IDN 的 TLD 列表。分别,
^[a-zA-Z0-9\-]+$
和^[a-zA-Z0-9\-\p{L}]+$
。但是,这不是一个理想的情况,因为每个 IDN 注册商都可以决定允许哪些字符。
我正在寻找的是一个适当的、一致的、最新的数据表,其中包含各种 TLD 中允许的 Unicode 字符。看起来我必须自己在俄罗斯和中国的注册网站上找到所有数据(这非常困难)。
因此,在我自己尝试收集所有这些数据之前,我想知道这样的列表是否已经存在。还是有更好的方法、最佳/常见做法等?(我希望验证尽可能严格。)