国家域名的PHP正则表达式

时间:2010-12-02 16:24:54

标签: php regex dns

Thare是新的国家域名和顶级域名,如“http://президент.рф/” - 适用于俄罗斯联邦域名,或http://example.新加坡适用于新加坡......

是否有正则表达式来验证这些域名?

我找到了这个:What is the best regular expression to check if a string is a valid URL?

但是当我尝试使用其中列出的一个表达式时 - PHP被忽略了:)

preg_match(): Compilation failed: character value in \x{...} sequence is too large at offset 81

P.S。

1)最后一部分由 @OmnipotentEntity

解决

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

不,没有正则表达式来验证这些域名。每个TLD对其IDN中允许的Unicode代码点(如果有)都有不同的规则。您需要一个非常大的查找表,必须保持最新状态才能知道哪些特定字符是合法的。

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

BTW,其他评论中提到的RFC已经过时了。最近批准的一套是RFC 5890 - 5895。