2015-12-04 64 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