用于国家域的php regexp

用于国家域的php regexp,php,regex,dns,Php,Regex,Dns,它们是新的国家域和TLD,如“”-用于俄罗斯联邦域,或用于新加坡 是否有用于验证这些域的正则表达式 我发现了这个: 但当我尝试使用其中一个表达式时,PHP被过度使用了:) 附言 1) 最后一部分由@OMNIPONTITY 2) 但是主要的问题——验证国际域——仍然存在,因为示例regexp无法很好地验证。使用“u”修饰符匹配unicode字符。您给出的示例仅使用“i”修饰符。否,没有用于验证这些域的regexp。每个TLD都有不同的规则,关于哪些Unicode代码点在其IDN中是允许的(如果

它们是新的国家域和TLD,如“”-用于俄罗斯联邦域,或用于新加坡

是否有用于验证这些域的正则表达式

我发现了这个:

但当我尝试使用其中一个表达式时,PHP被过度使用了:)

附言

1) 最后一部分由@OMNIPONTITY


2) 但是主要的问题——验证国际域——仍然存在,因为示例regexp无法很好地验证。

使用“u”修饰符匹配unicode字符。您给出的示例仅使用“i”修饰符。

否,没有用于验证这些域的regexp。每个TLD都有不同的规则,关于哪些Unicode代码点在其IDN中是允许的(如果有)。您需要一个非常大的查找表,该表必须保持最新,以了解哪些特定字符是合法的

此外,还有关于是否可以在单个DNS标签中组合从左到右的书写字符和从右到左的字符的规则


顺便说一句,其他评论中提到的RFC已经过时。最近批准的一套是RFCs 5890-5895。

但首要问题仍然存在。示例中的regexp验证域“http://$$ППззззззззззззз!!!。作为一个有效域:(我不想撒谎,看着这个正则表达式会伤到我的大脑。但是你使用的正则表达式似乎明确允许在域名中使用$和!。我仔细检查了rfc3986和3987,3986引用(通过1123)952,它定义了域名。但这是预国际化(写于1985年!)我不知道国际化后允许使用哪些字符,但如果你不想在域名中使用$and!进行验证,只需将它们去掉。这就是为什么这个问题至今没有确切答案:)谁知道regexp还遗漏了哪些Chatacter,还有什么需要添加才能使其完美。我明白了。所以现在我们没有任何好的域验证解决方案。对吗?
preg_match(): Compilation failed: character value in \x{...} sequence is too large at offset 81