Мне нужно удалить все символы из строки, которые не в a-z A-Z 0-9
наборе или не являются пробелами.
У кого-нибудь есть функция для этого?
Похоже, вы почти знали, что вы уже хотели делать, вы в основном определили это как регулярное выражение.
preg_replace("/[^A-Za-z0-9 ]/", '', $string);
preg_replace('/[^A-Za-z0-9 ]/', '', $string);
Для символов Юникода это:
источник
\w
включает\d
и так\d
ненужно. Кроме того, это неправильно, потому что это также оставит подчеркивание в результирующей строке (которая также включена в\w
).i
флаг здесь необходим, поскольку[:alnum:]
уже охватывает оба случая?Регулярное выражение ваш ответ.
i
Означает нечувствительны к регистру.^
значит, не начинается с.\d
соответствует любой цифре.a-z
соответствует всем символам междуa
иz
. Из-заi
параметра вам не нужно указыватьa-z
иA-Z
.\d
пробела допускаются пробелы в этом регулярном выражении.источник
вот действительно простое выражение для этого:
и используется по мере необходимости (с
/
разделителем косой черты).Проверьте это здесь с помощью этого замечательного инструмента, который объясняет, что делает регулярное выражение:
http://www.regexr.com/
источник
/u
флаг, в противном случае не-буквы ascii также удаляются.[\W_]+
Если вам требуется поддержка других языков, вместо типичного AZ, вы можете использовать следующее:
[^\p{L}\p{N} ]
определяет отрицательный (он будет соответствовать символу, который не определен) класс символов:\p{L}
: письмо с любого языка.\p{N}
: числовой символ в любом скрипте.: космический символ.
+
жадно соответствует классу персонажа от 1 до неограниченного количества раз.Это сохранит буквы и цифры из других языков и сценариев, а также AZ:
Примечание: это очень старый, но все еще актуальный вопрос. Я отвечаю исключительно, чтобы предоставить дополнительную информацию, которая может быть полезна для будущих посетителей.
источник
Он выбирает все, а не AZ, az, 0-9 и удаляет его.
Смотрите пример здесь: https://regexr.com/3h1rj
источник
\W
является инверсией\w
которых являются символыA-Za-z0-9_
. Так\W
будет соответствовать любой символ, которого нет,A-Za-z0-9_
и удалить их.[]
Является набор символов границы . Это+
избыточно на границе набора символов, но обычно означает 1 или более символов.u
Флаг расширяет выражение , чтобы включить поддержку юникода характер, то есть он не будет удалять символы за пределами кода символа 255 , например , какª²³µ
. Пример использования 3v4l.org/hSVV5 с символами Unicode и ASCII.Вы можете проверить это здесь: http://regexr.com/
источник
Я тоже искал ответ, и мое намерение состояло в том, чтобы убрать все не альфа, и там не должно быть больше одного пробела.
Итак, я изменил ответ Алекса на это, и это работает для меня
preg_replace('/[^a-z|\s+]+/i', ' ', $name)
. Выражение выше обратилось
sy8ed sirajul7_islam
кsy ed sirajul islam
Объяснению: регулярное выражение будет проверять НЕ ЛЮБОЙ от a до z в случае нечувствительного к регистру пути или более чем один пробел, и он будет преобразован в один пространство.
источник
Вы можете разбить строку на символы и отфильтровать ее.
источник
preg_replace()
вызовом.