Универсальная проверка URL.

Тема в разделе "Регулярные выражения", создана пользователем Maza, 20 июл 2011.

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

    Maza

    Регистр.:
    3 июл 2007
    Сообщения:
    255
    Симпатии:
    118
    Вобщем нужна помощь в до писании универсального патерна для проверки URL.
    Задача следующая:
    Чёт не приходит в голову пока ничего.
    PHP:
    <?php
    $string 
    "/www.yandex.ru/resume?sd=587&sd/user-st/";
    preg_match_all("#(?:http://)?/?([_a-zA-Z\d\-]+(?:\.[_a-zA-Z\d\-]+)+/?(?:[_a-zA-Z\d\-]+)?/?(?:[_a-zA-Z\d\Q-[]?.=%&;\E\\#]+)?/?)#",$string$matches);
    print_r($matches);
    ?>
     
  2. Darkmind

    Darkmind SNMP maniac

    Регистр.:
    31 май 2006
    Сообщения:
    183
    Симпатии:
    75
    Можно использовать опережающую проверку для отсекания недопустимых последовательностей:
    , где XXX - последовательность, при которой preg_match должен сфейлить, а ZZZ - регулярное выражение для матча нормальных урлов. Например:
    Знак вопроса экранирован, т.е. "плохая" последовательность: ?#/
    Полный вариант:
    PHP:
    if (preg_match('~^(?!.*\?#/)(?:http://)?/?([_a-zA-Z\d\-]+(?:\.[_a-zA-Z\d\-]+)+/?(?:[_a-zA-Z\d\-]+)?/?(?:[_a-zA-Z\d\Q-[]?.=%&;\E\\\\#]+)?/?)~im'$subject)) {
        
    // OK
    }
     
    Maza нравится это.
  3. Maza

    Maza

    Регистр.:
    3 июл 2007
    Сообщения:
    255
    Симпатии:
    118
    Не, не то. Всё равно пропускает такие последовательности.
     
  4. Maza

    Maza

    Регистр.:
    3 июл 2007
    Сообщения:
    255
    Симпатии:
    118
    Вобщем подсказали уже вот так.

    ^https?:\/\/(\w+(\.\w+)+(\/\?\w+=\w+)?)?\/?$
     
Статус темы:
Закрыта.