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

Тема в разделе "Регулярные выражения", создана пользователем artcosmic, 2 окт 2008.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. artcosmic

    artcosmic

    Регистр.:
    16 сен 2008
    Сообщения:
    198
    Симпатии:
    161
    Подскажите regex для PHP для определения того, является ли домен доменом второго уровня.
    Обязательно нужно учесть, что www - это не домен третьего уровня )
    Спасибо!
     
  2. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    Заранее известно, что строка- домен?
    Тогда:
    ^http://(?:www\.)?\w+\.\w{2,}$
     
  3. Liver

    Liver

    Регистр.:
    24 сен 2008
    Сообщения:
    316
    Симпатии:
    91
    Не нужно здесь никаких регулярок.
    Аналог на пхп проще и лучше.

    PHP:
    function isValidSubdomain($host){
        
    $host=str_replace("http://"''strtolower($host));
        
    $hostParts=explode('.'$host);
        if(
    count($hostParts)==3&&$hostParts[0]!='www')return true
        return 
    false;
    }
     
  4. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    Liver
    Некорректно работает только:) Потому что не проще.
     
  5. Liver

    Liver

    Регистр.:
    24 сен 2008
    Сообщения:
    316
    Симпатии:
    91
    Почему некорректно?
    Все зависит от входных данных. ТС ничего про них не сказал. Я использую $_SERVER['HTTP_HOST']. На рабочем сайте это отлично работает. Для тс я метод изменил. У меня он получает уровень домена.

    Разбор и последовательная очистка текста кодом работает лучше регулярок. То там не сошлось, то тут. А если использовать во время очистки регулярки попроще, то вообще хорошо выходит.
     
  6. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    Возвращает false, в случае, если домен как раз явлется доменом 2-ого уровня, ну да не это главное.
    http://sub.site.com.ua
    http://www.mysite.narod.ru
    Ошибочно посчитает доменами 2-ого уровня
    Одна ошибка в том что по условию, считает что если в начале стоит www, то это домен 2-ого уровня.
    Другая в том, что под !=3 попадает домен не третьего уровня, т.е. 4-ый, 5-ый и т.д. проходят.
    Регулярки проще, если знаешь конечно. Для этого их и придумали.
     
    Liver нравится это.
  7. artcosmic

    artcosmic

    Регистр.:
    16 сен 2008
    Сообщения:
    198
    Симпатии:
    161
    Входные данные простые:
    есть список доменов (около 1000 штук) - нужно выяснить, какие из них самостоятельные сайты (домены второго уровня), а какие - на фрихостах и блогофермах (домены третьего и больше уровня)
     
  8. Ragger

    Ragger

    Регистр.:
    14 июн 2008
    Сообщения:
    167
    Симпатии:
    183
    Textpipe: удалить согласующиеся строки - http://[^\.]*\.[^/]*/.*
     
  9. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    PHP:
    <?php
    function isTwoLivel($host){
    //предусловие: в $host правльный адрес сайта вида http://[www.][субдомены]site.ru
       
    return preg_match('{^http://(?:www\.)?\w+\.\w+$}'$host);
    }
    ?>
     
  10. Liver

    Liver

    Регистр.:
    24 сен 2008
    Сообщения:
    316
    Симпатии:
    91
    Да точно. Вот зря я его переделал.
    Так вернее.
    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 минут на написание такого метода, тс вынужден целый топик заводить и ждать ответы.
     
Статус темы:
Закрыта.