Как добавить в регулярное выражение кириллицу?

Добрый день.
Помогите, пожалуйста, доработать регулярку. Пытаюсь в нее добавить кириллицу, но все никак не удается.
Вроде стандартно должно меняться с a-zA-Z на а-яА-Яa-zA-Z, но при замене все крашится.

$name = preg_replace('/(^[0-9]+|[^a-zA-Z0-9\-\_\:]+)/',  '',  $name);

За любые идеи заранее спасибо!
  • Вопрос задан
  • 155 просмотров
Решения вопроса 1
Нужно выполнять с ключем u и, соответственно, а-яА-Я в нужное место добавить:
$name = preg_replace('/(^[0-9]+|[^a-zA-Z0-9\-\_\:]+)/u',  '',  $name);


Можно еще использовать ключ i, чтобы сразу учитывался и нижний и верхний регистр.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@rPman
preg_replace не понимает мультибайтовые кодировки, и воспринимает символы просто как набор байт, соответственно он может найти искомый символ к примеру на пересечении двух символов, где конец первого и начало второго символа случайно совпали с искомым символом (что произойдет с этими двумя символами или всей строкой после можете сами догадаться).

Я периодически вижу в интернете странные попытки настраивать локаль и использовать модификатор u и говорят даже работает, но документации для этого мне найти не удалось

Но зато есть штатный механизм работы с кодировками - это расширение Multibyte String, пользуйтесь им и все будет работать как ожидается. В частности использовать нужно mb_ereg_replace
Ответ написан
thewind
@thewind
php программист, front / backend developer
Для букв есть код \pL - это буквы любого алфавита.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
30 апр. 2024, в 15:24
3000 руб./за проект
30 апр. 2024, в 15:11
500 руб./в час
30 апр. 2024, в 15:11
5000 руб./за проект