2011-05-06 14 views
11

¿Cómo puedo crear una regla de validación que permita que un campo esté vacío pero si no lo está, debe ser numérico y 4 caracteres ¿largo?CakePHP - la validación puede estar vacía pero si no está vacía debe tener al menos 4 caracteres y un número

Esto es lo que tengo ahora

'year' => array(
     'numeric' => array(
      'rule' => 'numeric', 
      'message' => 'Numbers only' 
     ), 
     'maxLength' => array(
      'rule' => array('maxLength', 4), 
      'message' => 'Year in YYYY format' 
     ), 
     'minLength' => array(
      'rule' => array('minLength', 4), 
      'message' => 'Year in YYYY format' 
     ) 
    ) 

que funciona muy bien, pero cuando el campo está vacío, todavía ejecutar la validación.

Gracias,
Tee

Respuesta

26

El siguiente fragmento debe hacer el truco:

'numeric' => array(
    'rule' => 'numeric', 
    'allowEmpty' => true, 
    'message' => 'Numbers only' 
), 

Ver también el capítulo sobre data validation en el libro de cocina.

+0

También quiero poner al menos una regla obligatoria. ¿Cómo haría eso en la parte superior? Estoy usando un campo de matriz de entrada. – Anupal

0

La 'última' atributo debe ir => false. Así que la solución final debe ser similar:

'year' => array( 
    'numeric' => array( 
    'rule' => 'numeric', 
    'allowEmpty' => true, 
    'message' => 'Numbers only' 
    'last' => false ), ... 

personalmente me gusta separar las cosas (más legibilidad y fácil de depuración):

'year' => array( 
    'allowEmpty' => array( 
    'allowEmpty'=>true, 
    'last'=>false ), 'numeric'=> array( 
    'rule' =>'numeric', 
    'message' => 'Numbers only' 
),... ) 
0
'numeric' => array(
    'rule' => 'numeric', 
    'message' => 'Numbers only' 
), 
'maxLength' => array(
    'rule' => array('maxLength', 10), 
    'message' => '10 digit no' 
) 
0

Hay una manera de hacer esto simplemente

array(
     'myfield' => array(
      "rule_empty" => array(
        'rule' => '#.*#i', // validate everything 
        'allowEmpty' => true, 
        'last' => false 
       ), 
      "rule_price" => array(
       'message' => 'Is not a valid price ! ', 
       'rule' => "\/^[0-9]+(?:(\\.|,)[0-9]{1,})?$\/" 
      ) 
     ) 
    ); 
Cuestiones relacionadas