Как удалить не буквенно-цифровые символы?

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

Есть ли у кого-нибудь функция для этого?

Ответ 1

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

preg_replace("/[^A-Za-z0-9 ]/", '', $string);

Ответ 2

Для символов Unicode это:

preg_replace("/[^[:alnum:][:space:]]/u", '', $string);

Ответ 3

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

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

Ответ 4

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

\W|_

и используется по мере необходимости (с помощью разделителя /).

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

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

http://www.regexr.com/

Ответ 5

[\W_]+

 

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

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

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

Ответ 6

Если вам требуется поддержка других языков, вместо обычного 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} ]+/', '', '[email protected]~#123-+=öäå'); // abc123öäå
preg_replace('/[^\p{L}\p{N} ]+/', '', '你好世界[email protected]£$%^&*()'); // 你好世界

Note: This is a very old, but still relevant question. I am answering purely to provide supplementary information that may be useful to future visitors.

Ответ 7

preg_replace("/\W+/", '', $string)

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

Ответ 8

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

Ответ 9

Вы можете разбить строку на символы и отфильтровать ее.

<?php 

function filter_alphanum($string) {
    $characters = str_split($string);
    $alphaNumeric = array_filter($characters,"ctype_alnum");
    return join($alphaNumeric);
}

$res = filter_alphanum("a!bc!#123");
print_r($res); // abc123

?>

Ответ 10

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

//to remove non english character
$str = preg_replace('/[^\00-\255]+/u', '', $str);