2015-08-18 13 views
6

Devo convalidare un input basato su un'espressione regolare.CakePHP 3.0 - Convalida di espressioni regolari

//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.' 
      ]); 

ma ottengo il seguente errore:

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

Inoltre, non v'è alcuna menzione di espressioni regolari in Cake 3.0 validation Documentation a differenza Cake 2 Documentation.

È stato spostato o modificato?

+0

Molto tempo dopo il fatto, ma solo per constatare che, invece di {2,2} e {4,4}, è possibile scrivere {2} e {4} per corrisponde esattamente a 2 e 4 caratteri rispettivamente. –

risposta

19

Prova questo

$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

E una spiegazione per quale motivo. In CakePHP 3.0 si dispone di un oggetto 'Validator' che utilizza come provider predefinito gli insiemi descritti in [' Validation' class] (http://api.cakephp.org/3.0/class-Cake.Validation.Validation.html). Da quella classe ti interessa il metodo ['custom()'] (http://api.cakephp.org/3.0/class-Cake.Validation.Validation.html#_custom) che viene usato per controllare un campo contro una stringa REGEX. Quindi è necessario specificare il nome della regola ('custom') e l'argomento (la tua stringa regex) all'interno del valore della chiave' rule' quando si aggiunge() 'it. – user221931

+0

È possibile integrare questo con DefaultPasswordHasher? I.E dopo che ha abbinato questo validatore, viene eseguito attraverso una funzione? –