Регулярні вирази кирилиця PHP і оригінальна особистість

443

Від автора: іноді серед сірості буднів зустрічаються оригінальні особистості, заряджають тебе позитивом на цілий тиждень. Ось на днях зустрів одного розробника, який трактує себе «русофілом». Це від нього я дізнався, що регулярні вирази кирилиця PHP – цілком сумісні речі.

Навіщо російську мову?

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

До речі, згаданий вище «персонаж» у всіх своїх проектах реалізує підтримку введення кирилиці (в тому числі і в формах). На його думку, російські користувачі мають писати тільки російською. Звичайно, звучить дещо радикально, але сенс від цього теж є.

В PHP регулярних виразах підтримка російських букв бажана. Таким чином ви трохи покращуєте UX сайту і підвищуєте рівень безпеки.

Справа в тому, що паролі на кирилиці (на думку багатьох експертів) володіють більшим ступенем захищеності. І все завдяки тому, що закордонним зловмисникам дуже важко зрозуміти смислове взаємозв’язок російських символів, що використовуються в них. Це я знову наводжу висловлювання свого знайомого «русофіла-програміста» Регулярні вирази кирилиця PHP і оригінальна особистість .

Часта проблема русифікації форм

Тепер розглянемо часту проблему, зустрічається в PHP c російськими літерами. Регулярні вирази, в яких використовуються класи символів, будуть справно працювати з кириличними значеннями. Наприклад:

Регулярні вирази кирилиця PHP і оригінальна особистість

Та які тут проблеми! Все і так працює нормально! На жаль, не все так гладко з часто вживаної функцією для операцій з «регулярками» preg_match (). В якості доказу можна застосувати шаблон, створений за допомогою символьних класів:

У Денвері цей приклад буде працювати нормально, але на інших «перехресних локальних» серваках – не факт. Тому на спеціалізованих форумах часто можна зустріти питання розробників, які зіткнулися з цією проблемою. Тут може бути кілька варіантів її вирішення:

Прописка локалі з допомогою функції setlocale(), параметри якої також вказується кодування російських букв в PHP:

Регулярні вирази кирилиця PHP і оригінальна особистість

Вказівки модифікатора для шаблону u. Але це працює не завжди, оскільки його використання несумісне з синтаксисом Perl. В результаті скрипт відпрацює неправильно, так як обидві рядки «сприймаються» функцією preg_match() у форматі UTF-8. Тому ще і warning навздогін Регулярні вирази кирилиця PHP і оригінальна особистість .

Регулярні вирази кирилиця PHP і оригінальна особистість

Якщо далі копнути, то багато радять вказувати замість u модифікатор U. Але це різні модифікатори. Наприклад, останній покликаний боротися з «жадібністю» регулярок. Більше про це написано в документації мови. Це також слід враховувати при пошуку за допомогою PHP російських букв в URL.

Думаю, сьогодні мій знайомий порадіє. За просування російської мови він обіцяв мені три літри пива виставити. Але так як знає, що я його не п’ю, також пообіцяв випити за мене. Споконвічно російська риса характеру Регулярні вирази кирилиця PHP і оригінальна особистість .