2015-12-04 34 views
1

我正在使用PHP的DNS面板工作,并且必须验证DNS记录名称,而不使用结尾点。这里有几个例子:使用通配符验证域的正则表达式

example.com - match 
sub.example.com - match 
sub.sub.example.com - match 
*.example.com - match 
*.sub.example.com - match 
sub.*.example.com - no mach 
sub*.example.com - no match 
*sub.example.com - no match 

我目前正在使用此正则表达式,但问题是它不会匹配一个通配符(*):

^(?!\-)(?:[a-z\d\-]{0,62}[a-z\d]\.){1,126}(?!\d+)[a-z\d]{1,63}$ 

我不是格式化的正则表达式那么好。达到此目的的最佳方法是什么?谢谢!

回答

0

我发现使用正则表达式不充分尊重域规则的解决方案,但它的作品不够好,所以如果你在使用它计划我会建议做其他检查:

^(\*\.)?([a-z\d][a-z\d-]*[a-z\d]\.)+[a-z]+$ 

有一个通过PHP解决此问题的更好方法:

$tmp = $domain_to_check; 
if(strpos($tmp, '*.') === 0){ 
    $tmp = substr($tmp, 2); 
} 

if(filter_var('http://' . $tmp, FILTER_VALIDATE_URL)){ 
    // The format is valid 
}else{ 
    // The format is invalid 
} 
+0

这不应该适用于非英文域 – Gogol