Выборочное сокращение строки - PullRequest
1 голос
/ 18 мая 2011

Я хотел бы знать, как вырезать из строки все не алфавитно-цифровые символы, кроме подчеркивания и тире в PHP.

Ответы [ 3 ]

7 голосов
/ 18 мая 2011

Используйте preg_replace с /[^a-zA-Z0-9_\-]/ в качестве шаблона и '' в качестве замены.

$string = preg_replace('/[^a-zA-Z0-9_\-]/', '', $string);

РЕДАКТИРОВАТЬ

Как сказал Skippy, вы можете использовать модификатор i для нечувствительности к регистру:

$string = preg_replace('/[^a-z0-9_\-]/i', '', $string);
5 голосов
/ 18 мая 2011

Использовать preg_replace:

$str = preg_replace('/[^\w-]/', '', $str);

Первый аргумент preg_replace - это регулярное выражение.Этот содержит:

  • / - начальный разделитель - начало регулярного выражения
  • [ - начальный класс символов - определение символов, которые могут быть сопоставлены
  • ^ - отрицательный - сделать так, чтобы класс символов соответствовал только символам, которые не соответствуют выбору, который следует за
  • \w - символом слова - поэтому не соответствуют символам слова.Это A-Za-z0-9 и _ (подчеркивание)
  • - - дефис - тоже не соответствует переносам
  • ] - закрыть класс символов
  • / - конечный разделитель - закрыть регулярное выражение

Обратите внимание, что это соответствует только дефисам (т.е. -).Он не соответствует подлинным символам тире (- или -).

1 голос
/ 18 мая 2011

Принимает a-z, A-Z, 0-9, '-', '_' и пробелы:

$str = preg_replace("/[^a-z0-9\s_-]+/i", '', $tr);

Без пробелов:

$str = preg_replace("/[^a-z0-9_-]+/i", '', $tr);
...