Домен второго уровня

Статус
В этой теме нельзя размещать новые ответы.

artcosmic

Постоялец
Регистрация
16 Сен 2008
Сообщения
198
Реакции
162
Подскажите regex для PHP для определения того, является ли домен доменом второго уровня.
Обязательно нужно учесть, что www - это не домен третьего уровня )
Спасибо!
 
Заранее известно, что строка- домен?
Тогда:
^http://(?:www\.)?\w+\.\w{2,}$
 
Не нужно здесь никаких регулярок.
Аналог на пхп проще и лучше.

PHP:
function isValidSubdomain($host){
	$host=str_replace("http://", '', strtolower($host));
	$hostParts=explode('.', $host);
	if(count($hostParts)==3&&$hostParts[0]!='www')return true; 
	return false;
}
 
Liver
Некорректно работает только:) Потому что не проще.
 
Почему некорректно?
Все зависит от входных данных. ТС ничего про них не сказал. Я использую $_SERVER['HTTP_HOST']. На рабочем сайте это отлично работает. Для тс я метод изменил. У меня он получает уровень домена.

Разбор и последовательная очистка текста кодом работает лучше регулярок. То там не сошлось, то тут. А если использовать во время очистки регулярки попроще, то вообще хорошо выходит.
 
Возвращает false, в случае, если домен как раз явлется доменом 2-ого уровня, ну да не это главное.
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся
Ошибочно посчитает доменами 2-ого уровня
Одна ошибка в том что по условию, считает что если в начале стоит www, то это домен 2-ого уровня.
Другая в том, что под !=3 попадает домен не третьего уровня, т.е. 4-ый, 5-ый и т.д. проходят.
Регулярки проще, если знаешь конечно. Для этого их и придумали.
 
Входные данные простые:
есть список доменов (около 1000 штук) - нужно выяснить, какие из них самостоятельные сайты (домены второго уровня), а какие - на фрихостах и блогофермах (домены третьего и больше уровня)
 
Textpipe: удалить согласующиеся строки - http://[^\.]*\.[^/]*/.*
 
PHP:
<?php
function isTwoLivel($host){
//предусловие: в $host правльный адрес сайта вида http://[www.][субдомены]site.ru
   return preg_match('{^http://(?:www\.)?\w+\.\w+$}', $host);
}
?>
 
Возвращает false, в случае, если домен как раз явлется доменом 2-ого уровня, ну да не это главное......

Да точно. Вот зря я его переделал.
Так вернее.
PHP:
function isValidSubdomain($host){
    $host=str_replace("http://", '', strtolower($host));
    $hostParts=explode('.', $host);
    if(count($hostParts)==3&&$hostParts[0]!='www')return true;
    return false;
}

Однако по поводу регулярок не соглашусь. Делать надо всегда максимально просто. И вместо того, чтобы потратить 5 минут на написание такого метода, тс вынужден целый топик заводить и ждать ответы.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху