Monday, February 9, 2009

Валидность домена с точкой на конце

Адреса вида server.ru./page.htm (с точкой после имени домена) тоже правильные, в чем можно убедиться, посетив, например, http://www.google.com./search?hl=en&q=hello. Возникла задача - проверяя урл на правильность домена, не забыть про точку и убрать ее из адреса. Как сделать эффективнее проверку наличия точки? Вот в чем вопрос.

Быстренько накидал тесты очевидных решений:
$h = "subdomain.server.ru." ;

function test1($h)
{

if( !preg_match("|^([a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,6})(\.?)$|", $h, $m) ) {
return 0;
}
if($m[2]) return $m[1];
return $h;

}

function test2($h)
{
if( !preg_match("|^[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,6}\.?$|", $h) ) {
return 0;
}
if(substr($h, -1) == '.') return substr($h, 0, -1);
return $h;
}


Время выполнения 100.000 итераций каждого теста (PHP v5.2.5 Win32):
test1 - 0.53170919418335 sec
test2 - 0.44983506202698 sec

А если пресловутой точки нет в адресе, то второй тест отработает еще быстрее.

No comments: