PHP. Кириллица в регулярных выражениях

Author Роман Чернышов    Category PHP     Tags Комментариев 3 Дата 13 Ноя

regexp PHP. Кириллица в регулярных выраженияхСтолкнулся я с проблемой, а именно сайт не в какую не хотел поддерживать русские пароли. При регистрации пользователь в качестве пароля мог использовать только цифры и латинские буквы. Но для рунета также актуальна поддержка паролей с использованием кириллицы. Преимущества в том, что такой пароль пользователь легче запоминает, а также более высокая безопасность, на тот случай если его попытаются подобрать. Например китайские хакеры)).

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

Перед регулярным выражением в скрипте следует указать локаль, делается это написанием следующей команды (если используется кодировка UTF-8, если CP1251 то пишем её):

setlocale(LC_ALL, "ru_RU.UTF-8");

далее само регулярное выражение с ключем \u, чтобы обработчик знал, что в вырожении используются национальные символы.

preg_match('[^A-Za-z0-9а-яА-Я]u', $text)

Таким образом мы научили регулярные выражения дружить с кириллицей. Если есть какие-то дополнения то пожалуйста пишите.

3 комментария to “PHP. Кириллица в регулярных выражениях”

  • Алексей 22.03.2012 в 2:58 пп

    Не вырезает согласно шаблону прочие символы, типа знака вопроса и т.д. Если убрать ключ \u, то вырезает, но не дружит с кириллицей…

  • Алексей 22.03.2012 в 3:05 пп

    Разобрался. Ключ не там ставил
    /[^a-zA-Z0-9а-яА-Я ]/u — верно
    /[^a-zA-Z0-9а-яА-Я ]u/ — неверно

  • Ал 14.09.2012 в 11:24 дп

    Была похожая задача с кириллицей, только на проверку русских символов в слове без цифр, то бишь слово должно быть написано ТОЛЬКО русскими буквами.
    Писать через setlocale(LC_ALL, «ru_RU.UTF-8»); порой не вариант — не каждый сервак работает с кириллицей (как и в моем случае тоже). Поэтому решил обойти другим способом через 2 функции. Может кому то понадобится — буду рад

    function translitArray(){

    $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»,);

    return $arr;
    }

    function checkTownName($town_name){// check cyrillic symbols if symbol replacement count == word length without spaces

    $tArr = array_keys(translitArray());
    $town_name = str_replace(» «, «», $town_name);
    $town_length = mb_strlen($town_name);
    str_replace($tArr, «», $town_name, $town_check_length);
    return $town_check_length==$town_length;
    }

    Соль в том, что кол-во замен должно равняться кол-ву символов в слове

Оставить комментарий

О блоге и авторе

Добро пожаловать на блог веб-разработчика! На протяжении многих лет, начиная с 2009 года, я занимаюсь созданием специализированных сайтов, сервисов и крупных веб-порталов. Мною было создано несколько сотен сайтов, большинство из которых работают на ПО созданном под заказ, а также на готовом ПО которое я разрабатываю на протяжении всего периода моей деятельности. Это: CMS "Совместные покупки", CMS "osRealty", CMS "Спорт прогнозы" и многое другое.

На страницах моего блога вы найдете множество информации о программировании, о появлении новых разработок, сможете ознакомиться с товарами и услугами которые я предоставляю. А также сможете получить консультацию, заказать разработку сайта или приобрести готовое решение, для реализации собственного проекта.

Поиск по блогу
Категории
Архив
Новое на сайте
Блогеры пишут
  • Роман Чернышов: Для работы капчи на PHP 5.6, замените в файле class.captcha.php строку 264 $ifunc( $this -> i [...]
  • Роман Чернышов: Схема такая: 1) На сайте есть виртуальные кошельки (далее ВК) 2) При пополнении пользователем ВК, [...]
  • Александр: Может скрипт комментариев блокирует сообщения с кодом? Или как длинный текст не проходит?
  • Александр: Пытаюсь в который раз здесь показать код, но страница обновляется, и не сообщения, ни любого оповеще [...]
  • Роман Чернышов: Лично у меня интерес к продаже ссылок пропал уже давно. Преимущество сапы, это то - что ссылки можно [...]
Портфолио Все работы

www.detskiy-mir.net
www.detskydoctor.ru
www.betelit.ru
www.all-alliance.ru
www.videogonok.ru
www.carpfishing.by
www.property-greek.com
www.domcons.ru

с 2009 года по сегодняшний день, создано более 300 сайтов...