Контент


Валидация кириллицы

Итак, небольшая заметка по поводу использования правил валидации типа valid::alpha. Не знаю, как у вас, а у меня лично не получалось вводить русский текст в поля, «защищенные» правилами этого семейства (есть ведь еще alpha_numeric и прочие). Причем valid::standard_text работает нормально. Как исправить?

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

Первый вариант — перечисление диапазона значений вручную, что-то типа ‘chars[a-zA-Zа-яА-Я]‘. Минус — жестко указаны диапазон значений, недопустимы, к примеру, буквы других языков.

Второй вариант — использование UTF-режима, т.е. правило вида ‘chars[\pL]‘. Этот вариант мне нравится больше. Для сведения — вот краткий список обозначений:

  • \pL — буквы
  • \pLl — буквы в нижнем регистре
  • \pLu — буквы в верхнем регистре
  • \pN — цифры
  • \pZ — пробелы и другие невидимые символы (например, разделитель абзацев)
  • \pPc — знак подчеркивания
  • \pPd — дефис или тире
  • \pP — знак пунктуации вообще
  • \pSc — знаки валют

Можно использовать отрицание, для этого вместо \pN пишем \PN и т.д. Подробную информацию о unicode-свойствах можно прочитать тут.

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Опубликовано в напильник.

Теги: , , .


Комментарии (3)

Будьте в курсе обсуждения, подпишитесь на RSS ленту комментариев к этой записи.

  1. maxnag пишет:

    не совсем понял, куда пихать правило вида ‘chars[\pL]‘, не мог бы ты привести конкретный пример?
    ЗЫ Сделал бы ты запоминание в куку Имени, мыла и веба, а то каждый раз вводить…

  2. BIakaVeron пишет:

    Как и все прочие правила, добавляется через add_rules($fieldname, $rule1, …)

    По поводу куки не уверен, возможно это из-за того, что комментарии не прошли модерацию.

  3. блог php программиста пишет:

    ИМХ0
    буквы это понятно — полезно использовать \pL
    но для таких вещей как пробел, тире, цифры и тд проще использовать привычные обозначения



Можно включить подсветку кода: <code><pre lang="">...</pre></code>
Разрешены некоторые HTML теги

или используйте trackback.