регулярные выражения php кириллица
PHP. Кириллица в регулярных выражениях
Столкнулся я с проблемой, а именно сайт не в какую не хотел поддерживать русские пароли. При регистрации пользователь в качестве пароля мог использовать только цифры и латинские буквы. Но для рунета также актуальна поддержка паролей с использованием кириллицы. Преимущества в том, что такой пароль пользователь легче запоминает, а также более высокая безопасность, на тот случай если его попытаются подобрать. Например китайские хакеры)).
Задача заключалась научить PHP обрабатывать в регулярный выражениях русские символы. решение нашлось не сразу, но оказалось довольно таки простым.
Перед регулярным выражением в скрипте следует указать локаль, делается это написанием следующей команды (если используется кодировка UTF-8, если CP1251 то пишем её):
далее само регулярное выражение с ключем \u, чтобы обработчик знал, что в вырожении используются национальные символы.
Таким образом мы научили регулярные выражения дружить с кириллицей. Если есть какие-то дополнения то пожалуйста пишите.
Похожие записи
4 комментария to “PHP. Кириллица в регулярных выражениях”
Не вырезает согласно шаблону прочие символы, типа знака вопроса и т.д. Если убрать ключ \u, то вырезает, но не дружит с кириллицей…
Разобрался. Ключ не там ставил
/[^a-zA-Z0-9а-яА-Я ]/u — верно
/[^a-zA-Z0-9а-яА-Я ]u/ — неверно
Была похожая задача с кириллицей, только на проверку русских символов в слове без цифр, то бишь слово должно быть написано ТОЛЬКО русскими буквами.
Писать через setlocale(LC_ALL, «ru_RU.UTF-8»); порой не вариант — не каждый сервак работает с кириллицей (как и в моем случае тоже). Поэтому решил обойти другим способом через 2 функции. Может кому то понадобится — буду рад
$arr = array(«А» => «A», «Б» => «B», «В» => «V», «Г» => «G», «Д» => «D»,
«Е» => «E», «Ё» => «YO», «Ж» => «ZH»,
«З» => «Z», «И» => «I», «Й» => «J», «К» => «K», «Л» => «L»,
«М» => «M», «Н» => «N», «О» => «O», «П» => «P», «Р» => «R»,
«С» => «S», «Т» => «T», «У» => «U», «Ф» => «F», «Х» => «X»,
«Ц» => «C», «Ч» => «CH», «Ш» => «SH», «Щ» => «SHH», «Ъ» => «‘»,
«Ы» => «Y», «Ь» => «», «Э» => «E», «Ю» => «YU», «Я» => «YA»,
«а» => «a», «б» => «b», «в» => «v», «г» => «g», «д» => «d»,
«е» => «e», «ё» => «yo», «ж» => «zh»,
«з» => «z», «и» => «i», «й» => «j», «к» => «k», «л» => «l»,
«м» => «m», «н» => «n», «о» => «o», «п» => «p», «р» => «r»,
«с» => «s», «т» => «t», «у» => «u», «ф» => «f», «х» => «x»,
«ц» => «c», «ч» => «ch», «ш» => «sh», «щ» => «shh», «ъ» => «»,
«ы» => «y», «ь» => «», «э» => «e», «ю» => «yu», «я» => «ya»,);
Соль в том, что кол-во замен должно равняться кол-ву символов в слове
А как через preg_match (исключительно через эту функцию) искать внутри файла кириллические слова?
Регулярные выражения в PHP. Функция preg_match и utf-8
Дата публикации: 2016-07-25
От автора: приветствую вас, друзья. В предыдущей статье мы с вами говорили о специфике работы регулярных выражений в PHP с кириллицей. Однако использовали мы при этом кодировку windows-1251. В этой статье мы уже будем работать с кодировкой utf-8 и используем функцию preg_match для поиска кириллицы в тексте. Начнем?
Итак, в прошлой статье мы с вами использовали в качестве подопытного кролика следующую строку текста: «Иван Родил Девчонку, Велел Тащить Пелёнку». И вот такое регулярное выражение:
Этот шаблон вполне корректно работал с текстом в кодировке windows-1251, то есть с однобайтовой кодировкой. Сейчас эта кодировка используется все реже и реже. Практически стандартом стала кодировка utf-8. Давайте используем ее:
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Посмотрим на результат:
Упс, что-то не то. Почему так? Дело в том, что регулярные выражения по умолчанию работают с однобайтовой кодировкой. Кодировка же utf-8 — многобайтная. Для того, чтобы все работало корректно, необходимо всего лишь использовать специальный модификатор — u, который переводит шаблон регулярного выражения в режим совместимости с юникодом.
Вот теперь все работает корректно:
Как видим, все достаточно просто. Не забывайте об этом модификаторе и регулярные выражения будут правильно работать с юникодом. Стоит отметить, что этот модификатор присущ PHP. В JavaScript, к примеру, такого модификатора нет и регулярные выражения будут корректно работать с текстом в любом случае.
На этом мы будем завершать сегодняшнюю статью. Больше о регулярных выражениях вы можете узнать из нашего курса по регулярным выражениям. Удачи!
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Хотите изучить регулярные выражения на PHP?
Посмотрите 12-ти часовой видео курс по регулярным выражениям на PHP!
Регулярные выражения кириллица PHP и оригинальная личность
Дата публикации: 2017-03-27
От автора: иногда среди серости будней встречаются оригинальные личности, заряжающие тебя позитивом на целую неделю. Вот на днях встретил одного разработчика, который трактует себя «русофилом». Этот от него я узнал, что регулярные выражения кириллица PHP – вполне совместимые вещи.
Зачем русский язык?
Когда-то я уже говорил, что регулярные выражения чаще всего применяются в различных типах веб-форм. В данной ситуации мы обратим свой «взор» на регистрационные формы и реализацию поддержки ими значений на русском.
Кстати, упомянутый выше «персонаж» во всех своих проектах реализует поддержку ввода кириллицы (в том числе и в формах). По его мнению, российские пользователи должны писать только на русском. Конечно, звучит немного радикально, но прок от этого тоже есть.
В PHP регулярных выражениях поддержка русских букв желательна. Таким образом вы немного улучшаете UX сайта и повышаете уровень безопасности.
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Частая проблема русификации форм
Теперь рассмотрим частую проблему, встречающуюся в PHP c русскими буквами. Регулярные выражения, в которых используются не классы символов, будут исправно работать с кириллическими значениями. Например:
Да какие тут проблемы! Все и так работает нормально! К сожалению, не все так гладко с часто употребляемой функцией для операций с «регулярками» preg_match (). В качестве доказательства применим шаблон, созданный с помощью символьных классов:
В Денвере этот пример будет работать нормально, но на других «нелокальных» серваках – не факт. Поэтому на специализированных форумах часто можно встретить вопросы разработчиков, столкнувшихся с этой проблемой. Тут может быть несколько вариантов ее решения:
Прописка локали с помощью функции setlocale(), в параметрах которой также указывается кодировка русских букв в PHP:
Если дальше капнуть, то многие советуют указывать вместо u модификатор U. Но это разные модификаторы. Например, последний призван бороться с «жадностью» регулярок. Больше об этом написано в документации языка. Это также стоит учитывать при поиске с помощью PHP русских букв в URL.
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Хотите изучить регулярные выражения на PHP?
Посмотрите 12-ти часовой видео курс по регулярным выражениям на PHP!
Проверка данных регулярными выражениями в PHP
Содержание:
Сборник основных шаблонов регулярных выражений на PHP для проверки данных.
Проверка набора из латинских букв и цифр
Регулярное выражение для проверки набора только из латинских букв и цифр:
Если необходимо добавить в набор некоторые символы:
Проверка на кириллицу и цифры
Регулярное выражение для проверки набора только из букв кириллицы и цифр:
Проверка на число
Регулярное выражение для проверки данных на целое число:
Регулярное выражение для проверки данных на тип Float (числа с плавающей точкой):
Проверка логина
Регулярное выражение для проверки логина. Разрешено использовать только латинские буквы, цифры, тире и знак подчёркивания. Длина логина от 2 до 20 символов (включительно):
Проверка Email
Регулярное выражение для проверки Email:
Проверка номера телефона
Регулярное выражение для проверки номера телефона:
Проверка даты по формату
Формат MySQL YYYY-MM-DD :
Проверка md5-хэша
Регулярное выражение для проверки на корректность md5-хэша:
Проверка IP адресов
Регулярное выражение для проверки IPv4 адреса:
Проверка IPv6 адреса:
Проверка доменного имени
Регулярное выражение для проверки на корректность доменного имени сайта:
Регулярные выражения в PHP. Кириллица
Дата публикации: 2016-07-21
От автора: приветствую вас, друзья. В этой статье мы с вами узнаем некоторую специфику работы регулярных выражений с кириллицей вообще и конкретно в PHP. Приступим?
До этого, в предыдущих статьях мы с вами использовали в качестве текста исключительно латинницу, кириллицы мы избегали. Теперь давайте попробуем найти все кириллические буквы в строке. В качестве «испытуемого» мы используем фразу, которая может быть знакома кому-то со школьной скамьи: «Иван Родил Девчонку, Велел Тащить Пелёнку». Эта фраза призвана была помочь запомнить падежи в русском языке, поскольку первая буква каждого слова совпадает с тем или иным падежом.
Итак, как мы помним из предыдущих уроков, есть метасимвол \w, совпадающий с буквами, цифрами и символом подчеркивания. Однако в данном случае он не подойдет, поскольку совпадает он только с латинницей, не с кириллицей.
Как видим, этот шаблон действительно не подходит. Для поиска кириллицы мы должны использовать символьный класс — [], в котором укажем диапазон кириллических букв от а до я.
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Этот шаблон регулярного выражения уже лучше. Но все еще есть нюансы — не найдена буква ё. Эта буква в регулярных выражениях не входит в диапазон а-я и ее нужно указывать отдельно.
Вот теперь все отлично. Все кириллические буквы найдены. Однако шаблон мы тестировали в реализации регулярных выражений для JavaScript. Давайте попробуем протестировать его в PHP скрипте. Обратите внимание, я использую версию PHP 5.4 (в версиях ниже может быть другой результат). Также еще один нюанс — мы используем кодировку windows-1251 (в следующей статье мы узнаем нюансы работы с кодировкой utf-8).
Итак, скрипт ниже даст результат, который вы увидите на следующем скриншоте: