Как преобразовать строку в нижний регистр с помощью preg_replace - PullRequest
6 голосов
/ 30 марта 2012

Я просто застрял в этом и не могу найти решение. Я хотел бы попытаться преобразовать строку в нижний регистр, используя preg_replace. Я просто не могу создать правильное регулярное выражение. Причина в том, что обычный strtolower не поддерживает символы Юникода. Я знаю, что мог бы использовать mb_strtolower, но эта функция кажется довольно медленной, и кроме них не у всех есть поддержка MB.

Любая подсказка?

С уважением, Радек

РЕДАКТИРОВАТЬ: Хорошо, большое спасибо за вашу помощь, ребята. Я думаю, что мой подход был не совсем правильным. Я думаю, что было бы намного лучше использовать это: Как мне обнаружить не-ASCII символы в строке? и затем соответственно использовать либо strtolower, либо mb_strtolower, если доступно.

Ответы [ 2 ]

5 голосов
/ 30 марта 2012

Regex не может самостоятельно изменять символы, он может только изменять их порядок и / или добавлять дополнительные символы / удалять некоторые из них.

Существует флаг preg_replace_callback или / e , но они могут работать только с известными функциями и поэтому не могут работать лучше, чем strtolower.

Если вы не можете полагаться на существование функции mb_strolower, вам придется реализовать ее самостоятельно.

0 голосов
/ 30 марта 2012

Вы не должны использовать preg_replace для этого, потому что preg_replace используется для соответствия определенному шаблону и замены его чем-то другим. В общем, вам нужно заменить каждый отдельный символ в верхнем регистре на строчный, так что нет необходимости совмещать шаблон.

mb_strtolower был бы подходящим вариантом, и если у вас нет функций mb_, вам придется написать функцию самостоятельно, используя множество str_replace's ...

...