Вы можете использовать
preg_replace('/[^\p{L}\s]+/u', '', $str);
Шаблон [^\p{L}\s]+
будет соответствовать 1 или более экземплярам любого символа, кроме буквы Юникод или пробела.Обратите внимание, что из-за модификатора u
, \s
будет распознавать любые символы пробелов Юникода.
См. Демонстрационную версию regex .
Подробности
[^
- начало класса отрицанных символов , который соответствует любому символу, но \p{L}
- любая буква Unicode \s
- пробел
]+
- 1 или более раз.
Если у вас есть диакритические знаки и вы хотите их сохранить, выпридется добавить \p{M}
к классу отрицанных символов, /[^\p{L}\p{M}\s]+/u
.