Регулярные выражения кириллица PHP и оригинальная личность

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

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

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

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

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

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

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

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

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

<?php
$b="В этой строке присутствует слово есть";
if(preg_match("/есть/",$b))
{
echo "Подстрока найдена";
}
else
{
	echo "Подстрока не найдена";
	}
?>

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

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

<?php

$b="В этой строке присутствует слово есть";
if(preg_match("/[а-яА-Я]/",$b))
{
echo "Подстрока найдена";
}
else
{
	echo "Подстрока не найдена";
	}

?>

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

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

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

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

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

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

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

Самые свежие новости IT и веб-разработки на нашем Telegram-канале

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

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

Смотреть курс

Метки:

Комментарии Вконтакте:

Комментарии Facebook:

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

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

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree