Как удалить не буквенно-цифровые символы?
Мне нужно удалить все символы из строки, которые не входят в набор a-z A-Z 0-9
или не являются пробелами.
Есть ли у кого-нибудь функция для этого?
9 answers
Похоже, вы уже почти знали, что хотите сделать, вы в основном определили это как регулярное выражение.
preg_replace("/[^A-Za-z0-9 ]/", '', $string);
Для символов юникода это:
preg_replace("/[^[:alnum:][:space:]]/u", '', $string);
Регулярное выражение - это ваш ответ.
$str = preg_replace('/[^a-z\d ]/i', '', $str);
-
i
означает без учета регистра. -
^
означает, не начинается с. -
\d
соответствует любой цифре. -
a-z
соответствует всем символам междуa
иz
. Из-за параметраi
вам не нужно указыватьa-z
иA-Z
. - После
\d
есть пробел, поэтому в этом регулярном выражении допускаются пробелы.
Вот действительно простое регулярное выражение для этого:
\W|_
И используется по мере необходимости (с прямым разделителем /
).
preg_replace("/\W|_/", '', $string);
Протестируйте его здесь с помощью этого замечательного инструмента, который объясняет, что делает регулярное выражение:
[\W_]+
$string = preg_replace("/[\W_]+/u", '', $string);
Он выбирает все, кроме A-Z, a-z, 0-9, и удаляет их.
Смотрите пример здесь: https://regexr.com/3h1rj
preg_replace("/\W+/", '', $string)
Вы можете проверить это здесь: http://regexr.com/
Я тоже искал ответ, и моим намерением было очистить каждую не-альфу, и там не должно быть больше одного места.
Итак, я изменил ответ Алекса на этот вопрос, и это работает на меня
preg_replace('/[^a-z|\s+]+/i', ' ', $name)
Приведенное выше регулярное выражение превратило sy8ed sirajul7_islam
в sy ed sirajul islam
Пояснение: регулярное выражение будет проверять НЕ ЛЮБЫЕ от а до я в случае, если нечувствительный способ или более одного пробела, и оно будет преобразовано в один пробел.
Если вам нужна поддержка других языков, вместо типичного A-Z, вы можете использовать следующее:
preg_replace('/[^\p{L}\p{N} ]+/', '', $string);
-
[^\p{L}\p{N} ]
определяет отрицаемый (он будет соответствовать символу, который не определен ) класс символов:-
\p{L}
: письмо с любого языка. -
\p{N}
: числовой символ в любом сценарии. -
: a space character.
-
-
+
жадно соответствует классу персонажа от 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} ]+/', '', '你好世界!@£$%^&*()'); // 你好世界
Примечание: Это очень старый, но все еще актуальный вопрос. Я отвечаю исключительно для того, чтобы предоставить дополнительную информацию, которая может быть полезна будущим посетителям.
Я использую это:
//to remove non english character
$str = preg_replace('/[^\00-\255]+/u', '', $str);