Итак, небольшая заметка по поводу использования правил валидации типа 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-свойствах можно прочитать тут.
не совсем понял, куда пихать правило вида ‘chars[\pL]‘, не мог бы ты привести конкретный пример?
ЗЫ Сделал бы ты запоминание в куку Имени, мыла и веба, а то каждый раз вводить…
Как и все прочие правила, добавляется через add_rules($fieldname, $rule1, …)
По поводу куки не уверен, возможно это из-за того, что комментарии не прошли модерацию.
ИМХ0
буквы это понятно — полезно использовать \pL
но для таких вещей как пробел, тире, цифры и тд проще использовать привычные обозначения