2016-07-03 3 views
2

Я использую библиотеку проверки формы в CodeIgniter. Ниже config попробуйте включить все число, английские слова, китайские слова и пробел. Но это не работает.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 ]+$/]' 
         ) 
        ); 
+0

Try '/^[A-Za-z0-9 \ S \ {р Хан} ] + $/', как в PCRE, вы можете сопоставить китайские символы с' \ p {Han} 'Unicode. –

+0

Я проверяю его. Он может проверять английские слова и пространство. Но китайское слово не работает. – IvanK

ответ

0

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

/[a-zA-Z0-9 \x{4e00}-\x{9fa5}]+$/ 
+0

Я тестирую его. он не может подтвердить китайские слова, английские слова и пробел. – IvanK

+0

@ IvanK Давая образец Wiktor, этот RegEx [должен работать] (https://regex101.com/r/bC2iK2/2). – revo

+0

Это нормально на веб-сайте онлайн-тестирования, но не работает в моем коде. – IvanK

1

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

  • Регулярное выражение проверки должны начать соответствие в начале строки, таким образом, вам нужно начало строки якоря ^ или \A. Кроме того, целесообразно заменить $ на самый конец строкового якоря \z (как $ также соответствует перед окончательным символом новой строки в строке).
  • Revo is right, \uXXXX нотация не поддерживается механизмом регулярных выражений PHP. Однако вам не нужно указывать диапазон кодов Unicode здесь. Китайские иероглифы в PHP PCRE regex can be defined with a Unicode property \p{Han}.
  • Чтобы регулярное выражение PCRE стало известно в Unicode, вам необходимо использовать модификатор /u.

Таким образом, использование

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

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

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

Я тестирую два метода. Оба метода могут проверять английские слова и пространство. Но китайское слово не работает. – IvanK

+0

Укажите примерную строку ввода. [соответствует китайским словам] (https://regex101.com/r/bC2iK2/1). –

+0

Я не уверен в OP, но '\ p {Han}' содержит намного больше символов, чем предоставленный диапазон. Например. '\ Х {3400} - \ х {4dbf}' (CJK Unified Идеограммы Extension A) – revo

Смежные вопросы