Контент


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

Итак, небольшая заметка по поводу использования правил валидации типа 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
    но для таких вещей как пробел, тире, цифры и тд проще использовать привычные обозначения



Разрешены некоторые HTML теги

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