preg_match

Тема в разделе "Как сделать...", создана пользователем 4uva4ok, 7 авг 2012.

  1. 4uva4ok

    4uva4ok Писатель

    Регистр.:
    3 авг 2011
    Сообщения:
    0
    Симпатии:
    0
    Мне надо написать регулярное выражение так что ссылка была формата http://сайт.ru/id364
    (цифры будут меняются)

    И еще что б было просто http://сайт.ru/users/364
    пытался, но не получается, после цифр можно писать что угодно(
    PHP:
    if (!preg_match("|^[\d]+$|"$id)) {
    exit(
    "<p>Неверный формат запроса! Проверьте URL</p>");
    }
     
  2. Viodele

    Viodele Механик

    Administrator
    Регистр.:
    17 дек 2011
    Сообщения:
    110
    Симпатии:
    479
    Вы меня извините, но чтобы дать ответ на Ваш вопрос - нужно быть телепатом. Нельзя ли подробнее объяснить, какая целевая строка и какой результат Вам нужно из нее получить???
     
  3. potehi

    potehi Создатель

    Регистр.:
    9 авг 2008
    Сообщения:
    32
    Симпатии:
    22
    PHP:
    echo url_check('http://сайт.ru/users/364') . "\n";
    echo 
    url_check('http://сайт.ru/users/364/') . "\n";
    echo 
    url_check('http://сайт.ru/users/364/33') . "\n";
    echo 
    url_check('http://vstatuse.ru/users/364/') . "\n";
    echo 
    url_check('http://vstatuse/users/33/') . "\n";
    echo 
    url_check('http://vstatuse/33/') . "\n";
    echo 
    url_check('http://vstatuse.dfsf.dsf/33/') . "\n";
    echo 
    url_check('http://vstatuse.dfsf.dsf/33/fds/') . "\n";
     
    function 
    url_check$url ) {
        if (! 
    preg_match('|^http(s)?://[a-z0-9а-я-]+(.[a-z0-9а-я-]+)*(:[0-9]+)?\/users\/[0-9]+(/*?)?$|isu'$url) ) {
            return 
    $url ' - Неверный формат запроса! Проверьте URL';
        } else {
            return 
    $url ' - ok';
        }
    }
    Вот результаты теста регулярного выражения:

    http://сайт.ru/users/364 - ok
    http://сайт.ru/users/364/ - ok
    http://сайт.ru/users/364/33 - Неверный формат запроса! Проверьте URL
    http://vstatuse.ru/users/364/ - ok
    http://vstatuse/users/33/ - ok
    http://vstatuse/33/ - Неверный формат запроса! Проверьте URL
    http://vstatuse.dfsf.dsf/33/ - Неверный формат запроса! Проверьте URL
    http://vstatuse.dfsf.dsf/33/fds/ - Неверный формат запроса! Проверьте URL

    В тесте использовалась кодировка UTF-8, что видно по модификатору u регулярного выражения.
     
  4. 4uva4ok

    4uva4ok Писатель

    Регистр.:
    3 авг 2011
    Сообщения:
    0
    Симпатии:
    0
    У меня есть страница site.ru/id1 (id1 меняется в зависимости от пользователя - id2, id 536 и т.д.) мне надо задать такое условие чтоб в адресную строку кроме site.ru/id1 нельзя вводить
    Пример:
    site.ru/id1 - true
    site.ru/id3a- false
    site.ru/index.php?=id1- false
    site.ru/idoo1-false
    и тому подобное
     
  5. Viodele

    Viodele Механик

    Administrator
    Регистр.:
    17 дек 2011
    Сообщения:
    110
    Симпатии:
    479
    PHP:
    if (!preg_match ('/^http\:\/\/site\.ru\/id([0-9]+)$/'$url$matches)) die ('Уйди, противный...');
    Что-то в этом роде?
     
  6. 4uva4ok

    4uva4ok Писатель

    Регистр.:
    3 авг 2011
    Сообщения:
    0
    Симпатии:
    0
    Вроде того что надо, но что то не работает может что то не так написал
    PHP:
    if (!preg_match ('/^http\:\/\/second\/id([0-9]+)$/'$id)){
    exit(
    "<p>Неверный формат запроса! Проверьте URL</p>");
    }
    [​IMG]
     
  7. Viodele

    Viodele Механик

    Administrator
    Регистр.:
    17 дек 2011
    Сообщения:
    110
    Симпатии:
    479
    Перед этим кодом суньте:
    PHP:
    die (var_export ($idtrue));
    И скиньте сюда результат.
     
  8. 4uva4ok

    4uva4ok Писатель

    Регистр.:
    3 авг 2011
    Сообщения:
    0
    Симпатии:
    0
  9. Viodele

    Viodele Механик

    Administrator
    Регистр.:
    17 дек 2011
    Сообщения:
    110
    Симпатии:
    479
    Так у Вас там уже готовая ID. Не пойму, на кой вообще там нужна регулярка? Вполне сойдет конструкция в стиле:
    PHP:
    if (is_numeric ($id)) ...
    Но вообще, я так подозреваю, что сама переменная $id не особо пригодна для использования. Скорее всего, Ваш скрипт уже заведомо парсит URL, выбрасывая из него все лишнее, и выбирая только нужную информацию. Соответственно, URL типа site.ru/id3a автоматом конвертируется в нужную ID. А почему бы не попробовать взять данные URL из "другого места"? На худой конец, брать напрямую из глобальных переменных. Например:
    PHP:
    if (!preg_match ('/\/id(?i)([0-9]+)$/'$_SERVER['REQUEST_URI'])) die ('Die!');
    Работа у нас такая. :D
    Если будут возникать еще вопросы - можете писать в личку, дабы не мусорить форум. Если есть в сети - отвечаю обычно быстро.
     
    4uva4ok нравится это.