正则表达式使用通配符验证域

时间:2015-12-04 23:05:52

标签: php regex dns

我正在使用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}$

我在制作正则表达式方面不太好。实现这一目标的最佳方法是什么?谢谢!

1 个答案:

答案 0 :(得分: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
}