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

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

1d37r

Читатель
Заблокирован
Регистрация
16 Сен 2007
Сообщения
287
Реакции
62
  • Автор темы
  • Заблокирован
  • #1
при написании регулярного выражения допустим:
PHP:
// нам нужно вырезать все кроме букв, цифр и символов пробела, - и _
$test = ereg_replace("[^a-zA-Z0-9 -_]", "", $test);
// или
$test = preg_replace("/[^a-zA-Z0-9 -_]/i", "", $test);
но регулярка не срабатывает! и фильтрации нет, т.е. я могу конечно изменить порядок написания последних трех символов и все будет нормально, но мне интересно почему не срабатывает в таком порядке?
 
/[^a-zA-Z0-9 -_]/i
если стоит //i, то зачем A-Z?
 
  • Автор темы
  • Заблокирован
  • #4
/[^a-zA-Z0-9 -_]/i
если стоит //i, то зачем A-Z?
не в этом суть
я знаю что такое регулярные выражения...

Я хочу понять почему в моем примере не идет фильтрация/замена?
 
1d37r:
Для просмотра ссылки Войди или Зарегистрируйся очень помогает найти где ошибка
вот правильно
Код:
[^a-zA-Z0-9 \-_]
последний дефис надо слешировать, иначе он распознается как служебный символ группы (группа симовлов от пробела до _)
 
  • Автор темы
  • Заблокирован
  • #6
1d37r:
Для просмотра ссылки Войди или Зарегистрируйся очень помогает найти где ошибка
вот правильно
Код:
[^a-zA-Z0-9 \-_]
последний дефис надо слешировать, иначе он распознается как служебный символ группы (группа симовлов от пробела до _)

м, а почему в таком случае данное выражение, все нормально заменяет:
$test = ereg_replace("[^a-zA-Z0-9 _-]", "", $test);
 
потому что группа должна заканчиваться каким то символом, а после "-" его нету
это так называемы частный случай, повезло :)
Правильнее любые спецсимволы которые надо интерпертировать как обчные символы надо слешировать , дабы не вводить неоднозначность.
 
1d37r я сылку дал не для того что бы тебе показать что такое "регулярное выражение". Это самая удачная статья, в которой описывается правила написания регулярных выражений, если внимательно все прочтешь все вопросы отпадут сами собой.

Виллен, хороший инструмент, спасибо)
 
  • Автор темы
  • Заблокирован
  • #9
понятно :) т.е. получается, только криворукий кодер такое напишет, кст... в последний джумле есть такая оплошность :)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху