Php регулярные выражения кириллица

Дата публикации: 2016-07-21

От автора: приветствую вас, друзья. В этой статье мы с вами узнаем некоторую специфику работы регулярных выражений с кириллицей вообще и конкретно в PHP. Приступим?

До этого, в предыдущих статьях мы с вами использовали в качестве текста исключительно латинницу, кириллицы мы избегали. Теперь давайте попробуем найти все кириллические буквы в строке. В качестве «испытуемого» мы используем фразу, которая может быть знакома кому-то со школьной скамьи: «Иван Родил Девчонку, Велел Тащить Пелёнку». Эта фраза призвана была помочь запомнить падежи в русском языке, поскольку первая буква каждого слова совпадает с тем или иным падежом.

Итак, как мы помним из предыдущих уроков, есть метасимвол w, совпадающий с буквами, цифрами и символом подчеркивания. Однако в данном случае он не подойдет, поскольку совпадает он только с латинницей, не с кириллицей.

Как видим, этот шаблон действительно не подходит. Для поиска кириллицы мы должны использовать символьный класс — [], в котором укажем диапазон кириллических букв от а до я.

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Этот шаблон регулярного выражения уже лучше. Но все еще есть нюансы — не найдена буква ё. Эта буква в регулярных выражениях не входит в диапазон а-я и ее нужно указывать отдельно.

Вот теперь все отлично. Все кириллические буквы найдены. Однако шаблон мы тестировали в реализации регулярных выражений для JavaScript. Давайте попробуем протестировать его в PHP скрипте. Обратите внимание, я использую версию PHP 5.4 (в версиях ниже может быть другой результат). Также еще один нюанс — мы используем кодировку windows-1251 (в следующей статье мы узнаем нюансы работы с кодировкой utf-8).

Читайте также:  Nikon coolpix l120 прошивка

Итак, скрипт ниже даст результат, который вы увидите на следующем скриншоте:

Дата публикации: 2017-03-27

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

Зачем русский язык?

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

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

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

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

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

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

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

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

Читайте также:  The e modifier is deprecated

В Денвере этот пример будет работать нормально, но на других «нелокальных» серваках – не факт. Поэтому на специализированных форумах часто можно встретить вопросы разработчиков, столкнувшихся с этой проблемой. Тут может быть несколько вариантов ее решения:

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

Указания модификатора для шаблона u. Но это работает не всегда, поскольку его использование несовместимо с синтаксисом Perl. В результате скрипт отработает неправильно, так как обе строки «воспринимаются» функцией preg_match() в формате UTF-8. Поэтому еще и warning вдогонку .

Если дальше капнуть, то многие советуют указывать вместо u модификатор U. Но это разные модификаторы. Например, последний призван бороться с «жадностью» регулярок. Больше об этом написано в документации языка. Это также стоит учитывать при поиске с помощью PHP русских букв в URL.

Думаю, сегодня мой знакомый порадуется. За продвижение русского языка он обещал мне три литра пива выставить. Но так как знает, что я его не пью, также пообещал выпить их за меня. Исконно русская черта характера .

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Хотите изучить регулярные выражения на PHP?

Посмотрите 12-ти часовой видео курс по регулярным выражениям на PHP!

Задача валидировать поле на кириллицу, пробел и дефис.

То есть, чтоб пользователь мог ввести только кириллицу, или кириллицу с пробелом или с дефисом.

ЗЫ
Просто с кириллицей я разобрался, а как его доработать до пробела и дефиса?
^[А-Яа-я]+$’

Rate this post

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *