2015-12-04 2 views
1

Я работаю над панелью DNS в PHP, и мне нужно проверить имя записи DNS без конечной точки. Вот несколько примеров:Regex для проверки доменов с помощью подстановочных знаков

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

Смежные вопросы