2011-05-06 57 views
11

如何创建允许字段为空的验证规则,但如果不是,则需要为数字和4个字符长?CakePHP - 验证可以为空,但如果不为空,则至少需要4个字符和数字

这就是我现在

'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' 
     ) 
    ) 

这伟大工程,但是当该字段为空,但仍运行验证有。

感谢,
三通

回答

26

下面的代码片段应该做的伎俩:

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

另见食谱章节约data validation

+0

我也想至少提出一个必要的规则。我会如何做到这一点?我正在使用输入数组字段。 – Anupal 2015-06-29 09:35:40

0

'最后' 属性应该去=>为false。因此,最终的解决方案应该是这样的:

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

我个人比较喜欢(在调试更加易读,更容易)分开的事情:

'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

有办法做到这根本

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,})?$\/" 
      ) 
     ) 
    ); 
相关问题