Мне нужно удалить все символы из строки, которые не находятся в a-z A-Z 0-9
, или не являются пробелами.
Есть ли у кого-нибудь функция для этого?
Похоже, вы почти знали, что вы хотели сделать, вы в основном определили его как регулярное выражение.
preg_replace("/[^A-Za-z0-9 ]/", '', $string);
Для символов Unicode это:
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);
Проверьте это здесь с помощью этого замечательного инструмента, который объясняет, что делает регулярное выражение:
/u
противном случае не-буквы ascii также удаляются.
[\W_]+
$string = preg_replace("/[\W_]+/u", '', $string);
Он выбирает все не A-Z, a-z, 0-9 и удаляет его.
См. пример здесь: https://regexr.com/3h1rj
preg_replace("/\W+/", '', $string)
Вы можете протестировать его здесь: http://regexr.com/
Я тоже искал ответ, и мое намерение состояло в том, чтобы очистить все не-альфы, и не должно быть больше одного места.
Итак, я модифицировал Alex на это, и это работает для меня
preg_replace('/[^a-z|\s+]+/i', ' ', $name)
Регулярное выражение выше получило sy8ed sirajul7_islam
до sy ed sirajul islam
Объяснение: regex будет проверять НЕ ЛЮБОЕ от a до z в случае нечувствительного пути или более чем в одном пробеле, и он будет преобразован в одно пространство.
i использую это:
//to remove non english character
$str = preg_replace('/[^\00-\255]+/u', '', $str);
[^\x00-\xAD]
где 0xAD - это кодовая точка для SOFT HYPEN. Даже если вы делали это правильно, [^\x00-\xFF]
совершенно бессмысленно и неправильно.