Проверка формы CodeIgniter для китайских слов

Я использую библиотеку проверки формы в CodeIgniter. Ниже конфиг попробуйте включить все числа, английские слова, китайские слова и пробел. Но это не работа.

$config = array(
                array(
                       'field' => 'keywords',
                       'label' => 'keywords',
                       'rules' => 'regex_match[/[a-zA-Z0-9 \u4e00-\u9fa5]+$/]'
                    )
                );

Однако, если я выведу 'u4e00-\u9fa5', это работа.

$config = array(
                    array(
                           'field' => 'keywords',
                           'label' => 'keywords',
                           'rules' => 'regex_match[/[a-zA-Z0-9 ]+$/]'
                        )
                    );

2 ответа

В этом регулярном выражении есть три вопроса:

  • Проверочное регулярное выражение должно начинаться с совпадения в начале строки, поэтому вам нужно начать привязку строки ^ или же \A, Также целесообразно заменить $ с самого конца якоря строки \z (как $ также соответствует перед последним символом новой строки в строке).
  • Рево прав, \uXXXX нотация не поддерживается движком PHP regex. Однако вам не нужно указывать диапазон кодовых точек Unicode здесь. Китайские символы в регулярном выражении PHP PCRE могут быть определены с помощью свойства Unicode\p{Han},
  • Чтобы регулярное выражение PCRE стало известно о Юникоде, вам необходимо использовать /u модификатор.

Итак, используйте

/\A[a-zA-Z0-9\s\p{Han}]+\z/u

Или (чуть менее безопасно),

/^[a-zA-Z0-9\s\p{Han}]+$/u

PCRE не поддерживает \uFFFF синтаксис. использование \x{FFFF} вместо.

/[a-zA-Z0-9 \x{4e00}-\x{9fa5}]+$/
Другие вопросы по тегам