2011-05-06 49 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,})?$\/" 
      ) 
     ) 
    ); 
相關問題