Мне нужно удалить все символы из строки, которые не находятся в az AZ 0-9
или не являются пробелами.
У кого-нибудь есть функция для этого?
Похоже, вы почти знали, что вы хотели сделать, вы в основном определили его как регулярное выражение.
preg_replace("/[^A-Za-z0-9 ]/", '', $string);
Для символов Unicode это:
preg_replace("/[^[:alnum:][:space:]]/u", '', $string);
Регулярное выражение – ваш ответ.
$str = preg_replace('/[^az\d ]/i', '', $str);
i
означает нечувствительность к регистру. ^
означает, не начинается с. \d
соответствует любой цифре. az
соответствует всем символам между a
и z
. Из-за параметра i
вам не нужно указывать az
и AZ
. \d
есть пробел, поэтому в этом регулярном выражении допускаются пробелы. вот для этого очень простое регулярное выражение:
\W|_
и используется так, как вам нужно (с разделителем прямого /
слэша).
preg_replace("/\W|_/", '', $string);
Протестируйте его здесь с помощью этого замечательного инструмента, который объясняет, что делает регулярное выражение:
[\W_]+
$string = preg_replace("/[\W_]+/u", '', $string);
Он выбирает все не AZ, az, 0-9 и удаляет его.
См. Пример здесь: https://regexr.com/3h1rj
Я тоже искал ответ, и мое намерение состояло в том, чтобы очистить каждую не-альфу, и не должно быть более одного места.
Итак, я изменил ответ Алекса на это, и это работает для меня preg_replace('/[^az|\s+]+/i', ' ', $name)
sy8ed sirajul7_islam
выражение выше получило sy8ed sirajul7_islam
для sy ed sirajul islam
Объяснение: regex будет проверять NOT ANY от a до z в случае нечувствительного способа или более чем в одном пробеле, и он будет преобразован в одно пространство.
preg_replace("/\W+/", '', $string)
Вы можете протестировать его здесь: http://regexr.com/
я использую это:
//to remove non english character $str = preg_replace('/[^\00-\255]+/u', '', $str);