Как удалить не алфавитно-цифровые символы? - PullRequest
314 голосов
/ 18 марта 2009

Мне нужно удалить все символы из строки, которые не установлены a-z A-Z 0-9 или не являются пробелами.

У кого-нибудь есть такая функция?

Ответы [ 9 ]

640 голосов
/ 18 марта 2009

Звучит так, будто вы почти знали, что уже хотели делать, вы в основном определили это как регулярное выражение.

preg_replace("/[^A-Za-z0-9 ]/", '', $string);
158 голосов
/ 17 июня 2013

Для символов Юникода это:

preg_replace("/[^[:alnum:][:space:]]/u", '', $string);
48 голосов
/ 18 марта 2009

Регулярное выражение - ваш ответ.

$str = preg_replace('/[^a-z\d ]/i', '', $str);
  • i обозначает регистр без учета регистра.
  • ^ означает, что не начинается с.
  • \d соответствует любой цифре.
  • a-z соответствует всем символам от a до z. Из-за параметра i вам не нужно указывать a-z и A-Z.
  • После \d есть пробел, поэтому в этом регулярном выражении допускаются пробелы.
16 голосов
/ 17 октября 2014

вот действительно простое выражение для этого:

\W|_

и используется по мере необходимости (с символом косой черты /).

preg_replace("/\W|_/", '', $string);

Проверьте это здесь с помощью этого замечательного инструмента, который объясняет, что делает регулярное выражение:

http://www.regexr.com/

5 голосов
/ 25 октября 2017
[\W_]+

1002 *

$string = preg_replace("/[\W_]+/u", '', $string);

Выделите все, кроме A-Z, a-z, 0-9, и удалите его.

Смотрите пример здесь: https://regexr.com/3h1rj

4 голосов
/ 04 сентября 2018

Если вам требуется поддержка других языков, вместо обычного A-Z, вы можете использовать следующее:

preg_replace('/[^\p{L}\p{N} ]+/', '', $string);
  • [^\p{L}\p{N} ] определяет отрицательный (он будет соответствовать символу, который не определен) класс символов:
    • \p{L}: письмо от любого языка.
    • \p{N}: числовой символ в любом скрипте.
    • : пробел.
  • + жадно соответствует классу символов от 1 до неограниченно раз.

Это сохранит буквы и цифры из других языков и сценариев, а также A-Z:

preg_replace('/[^\p{L}\p{N} ]+/', '', 'hello-world'); // helloworld
preg_replace('/[^\p{L}\p{N} ]+/', '', 'abc@~#123-+=öäå'); // abc123öäå
preg_replace('/[^\p{L}\p{N} ]+/', '', '你好世界!@£$%^&*()'); // 你好世界

Примечание: Это очень старый, но все еще актуальный вопрос. Я отвечаю исключительно, чтобы предоставить дополнительную информацию, которая может быть полезна для будущих посетителей.

2 голосов
/ 26 июля 2017
preg_replace("/\W+/", '', $string)

Вы можете проверить это здесь: http://regexr.com/

0 голосов
/ 17 декабря 2016

Я тоже искал ответ, и мое намерение состояло в том, чтобы убрать все не-альфа, и там не должно быть больше одного пробела.
Итак, я изменил ответ Алекса на это, и это работает для меня preg_replace('/[^a-z|\s+]+/i', ' ', $name)
Выражение выше превратилось sy8ed sirajul7_islam в sy ed sirajul islam
Объяснение: регулярное выражение проверит НЕ ЛЮБОЙ от a до z в случае, если нечувствителен путь или более одного пробела, и будет преобразовано в один пробел.

0 голосов
/ 27 апреля 2015

Я использую это:

//to remove non english character
$str = preg_replace('/[^\00-\255]+/u', '', $str);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...