Бага или фича PHP илиже моя оплошность?

Тема в разделе "PHP", создана пользователем 1d37r, 23 мар 2009.

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

    1d37r Читатель

    Заблокирован
    Регистр.:
    16 сен 2007
    Сообщения:
    287
    Симпатии:
    48
    при написании регулярного выражения допустим:
    PHP:
    // нам нужно вырезать все кроме букв, цифр и символов пробела, - и _
    $test ereg_replace("[^a-zA-Z0-9 -_]"""$test);
    // или
    $test preg_replace("/[^a-zA-Z0-9 -_]/i"""$test);
    но регулярка не срабатывает! и фильтрации нет, т.е. я могу конечно изменить порядок написания последних трех символов и все будет нормально, но мне интересно почему не срабатывает в таком порядке?
     
  2. t0os

    t0os

    Регистр.:
    21 окт 2007
    Сообщения:
    284
    Симпатии:
    36
    /[^a-zA-Z0-9 -_]/i
    если стоит //i, то зачем A-Z?
     
  3. Maxsystems

    Maxsystems Создатель

    Регистр.:
    18 мар 2009
    Сообщения:
    22
    Симпатии:
    2
  4. 1d37r

    1d37r Читатель

    Заблокирован
    Регистр.:
    16 сен 2007
    Сообщения:
    287
    Симпатии:
    48
    не в этом суть
    я знаю что такое регулярные выражения...

    Я хочу понять почему в моем примере не идет фильтрация/замена?
     
  5. Виллен

    Виллен

    Регистр.:
    12 мар 2009
    Сообщения:
    235
    Симпатии:
    60
    1d37r:
    http://regexpal.com/ очень помогает найти где ошибка
    вот правильно
    Код:
    [^a-zA-Z0-9 \-_]
    
    последний дефис надо слешировать, иначе он распознается как служебный символ группы (группа симовлов от пробела до _)
     
    Maxsystems нравится это.
  6. 1d37r

    1d37r Читатель

    Заблокирован
    Регистр.:
    16 сен 2007
    Сообщения:
    287
    Симпатии:
    48
    м, а почему в таком случае данное выражение, все нормально заменяет:
    $test = ereg_replace("[^a-zA-Z0-9 _-]", "", $test);
     
  7. Виллен

    Виллен

    Регистр.:
    12 мар 2009
    Сообщения:
    235
    Симпатии:
    60
    потому что группа должна заканчиваться каким то символом, а после "-" его нету
    это так называемы частный случай, повезло :)
    Правильнее любые спецсимволы которые надо интерпертировать как обчные символы надо слешировать , дабы не вводить неоднозначность.
     
    1d37r нравится это.
  8. Maxsystems

    Maxsystems Создатель

    Регистр.:
    18 мар 2009
    Сообщения:
    22
    Симпатии:
    2
    1d37r я сылку дал не для того что бы тебе показать что такое "регулярное выражение". Это самая удачная статья, в которой описывается правила написания регулярных выражений, если внимательно все прочтешь все вопросы отпадут сами собой.

    Виллен, хороший инструмент, спасибо)
     
  9. 1d37r

    1d37r Читатель

    Заблокирован
    Регистр.:
    16 сен 2007
    Сообщения:
    287
    Симпатии:
    48
    понятно :) т.е. получается, только криворукий кодер такое напишет, кст... в последний джумле есть такая оплошность :)
     
Статус темы:
Закрыта.