Следите за выражениями

При составлении регулярных выражений мы часто пользуемся специальными сервисами и только потом переносим эти выражения в свой код.

Иногда даже проверенные регулярные выражения могут работать не так, как ожидалось. Конечно, большинство проблем решается с помощью применения флагов или дополнительного изучения справочной информации.
Но бывают случаи, когда локальные тесты проходят успешно, а при переносе на промышленные серверы поведение «регулярки» меняется не в лучшую сторону.

Работа с кириллицей может стать корнем проблем. Вот такое регулярное выражение отказалось работать с русскими буквами на промышленном сервере заказчика:

$string = preg_replace('/[^dws.:-]+/u', '', $string);

Изучив проблему, мы поняли, что в старых версиях PHP-модуля pcre стандартный перечень w не охватывает кириллические символы даже с модификатором u. Именно этот модуль реализует работу Perl-совместимых регулярных выражений в PHP.

Для того чтобы ваши регулярные выражения корректно работали с русскими символами, необходимо, чтобы версия pcre была не ниже 8.38. Проверить это можно, выполнив консольную команду

$ php -i | grep PCRE

Сделано в Лаборатории Студии Чулакова

Студия Олега Чулакова

Дизайн-студия № 1 в России по версии Tagline, лучший usability / UX в стране по версии Золотого Сайта.

Специализируется на создании сложных систем и сервисов для крупных компаний. Среди клиентов Студии Tele2, ИКЕА, МегаФон, БКС Банк, Yota и другие крупнейшие российские бренды.