Від автора: іноді серед сірості буднів зустрічаються оригінальні особистості, заряджають тебе позитивом на цілий тиждень. Ось на днях зустрів одного розробника, який трактує себе «русофілом». Це від нього я дізнався, що регулярні вирази кирилиця PHP – цілком сумісні речі.
Навіщо російську мову?
Колись я вже говорив, що регулярні вирази найчастіше застосовуються в різних типах веб-форм. В даній ситуації ми звернемо свій «погляд» на реєстраційні форми і реалізацію підтримки ними значень російською.
До речі, згаданий вище «персонаж» у всіх своїх проектах реалізує підтримку введення кирилиці (в тому числі і в формах). На його думку, російські користувачі мають писати тільки російською. Звичайно, звучить дещо радикально, але сенс від цього теж є.
В PHP регулярних виразах підтримка російських букв бажана. Таким чином ви трохи покращуєте UX сайту і підвищуєте рівень безпеки.
Справа в тому, що паролі на кирилиці (на думку багатьох експертів) володіють більшим ступенем захищеності. І все завдяки тому, що закордонним зловмисникам дуже важко зрозуміти смислове взаємозв’язок російських символів, що використовуються в них. Це я знову наводжу висловлювання свого знайомого «русофіла-програміста» .
Часта проблема русифікації форм
Тепер розглянемо часту проблему, зустрічається в PHP c російськими літерами. Регулярні вирази, в яких використовуються класи символів, будуть справно працювати з кириличними значеннями. Наприклад:
Та які тут проблеми! Все і так працює нормально! На жаль, не все так гладко з часто вживаної функцією для операцій з «регулярками» preg_match (). В якості доказу можна застосувати шаблон, створений за допомогою символьних класів:
У Денвері цей приклад буде працювати нормально, але на інших «перехресних локальних» серваках – не факт. Тому на спеціалізованих форумах часто можна зустріти питання розробників, які зіткнулися з цією проблемою. Тут може бути кілька варіантів її вирішення:
Прописка локалі з допомогою функції setlocale(), параметри якої також вказується кодування російських букв в PHP:
Вказівки модифікатора для шаблону u. Але це працює не завжди, оскільки його використання несумісне з синтаксисом Perl. В результаті скрипт відпрацює неправильно, так як обидві рядки «сприймаються» функцією preg_match() у форматі UTF-8. Тому ще і warning навздогін .
Якщо далі копнути, то багато радять вказувати замість u модифікатор U. Але це різні модифікатори. Наприклад, останній покликаний боротися з «жадібністю» регулярок. Більше про це написано в документації мови. Це також слід враховувати при пошуку за допомогою PHP російських букв в URL.
Думаю, сьогодні мій знайомий порадіє. За просування російської мови він обіцяв мені три літри пива виставити. Але так як знає, що я його не п’ю, також пообіцяв випити за мене. Споконвічно російська риса характеру .