2015-08-18 4 views
6

Мне нужно проверить вход на основе регулярного выражения.CakePHP 3.0 - Проверка регулярного выражения

//Validator 
$validator 
      ->notEmpty('sl_no') 
      ->add('reg_no', 'validFormat',[ 
        'rule' => '/^([ABCD]{2,2}[0-9]{4,4})$/i', 
        'message' => 'Please enter a valid serial number.' 
      ]); 

Но я получаю следующее сообщение об ошибке:

Method /^([ABCD]{2,2}[0-9]{4,4})$/i does not exist.

Кроме того, нет никакого упоминания о регулярных выражений в Cake 3.0 validation Documentation в отличие от Cake 2 Documentation.

Было ли это изменено или изменено?

+0

долгое время после того, как тот факт, но только отметить, что, вместо {2,2} и {4,4}, вы можете написать {2} и {4}, чтобы соответствуют соответственно 2 и 4 символам. –

ответ

19

Попробуйте

$validator 
     ->notEmpty('sl_no') 
     ->add('reg_no', 'validFormat',[ 
       'rule' => array('custom', '/^([ABCD]{2,2}[0-9]{4,4})$/i'), 
       'message' => 'Please enter a valid serial number.' 
     ]); 
+3

И объяснение, почему это так. В CakePHP 3.0 у вас есть объект 'Validator', который использует в качестве поставщика по умолчанию множества, описанные в [' Validation' class] (http://api.cakephp.org/3.0/class-Cake.Validation.Validation.html). С этого класса вас интересует метод ['custom()') (http://api.cakephp.org/3.0/class-Cake.Validation.Validation.html#_custom), который используется для проверки поле против строки REGEX. Так вы должны указать имя правила ('custom') и аргумент (ваша строка регулярного выражения) внутри значения ключа' rule', когда вы 'add()' it. – user221931

+0

Можно ли интегрировать это с DefaultPasswordHasher? I.Е после того, как он соответствует этому валидатору, он запускается через функцию? –

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