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