CakePHP - 验证可以是空的,但如果不是空的,则需要至少4个字符&数字

时间:2011-05-06 15:14:27

标签: 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'
        )
    )

效果很好但是当字段为空时,它仍然运行验证。

谢谢,
三通

5 个答案:

答案 0 :(得分:27)

以下代码段可以解决这个问题:

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

另见烹饪书中关于data validation的章节。

答案 1 :(得分:1)

你也忘记了最后一个=> true参数 - 有关详细信息,请参阅http://www.dereuromark.de/2010/07/19/extended-core-validation-rules/

答案 2 :(得分:0)

'last'属性应该= =>为假。所以最终的解决方案应该是这样的:

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

答案 3 :(得分:0)

'numeric' => array(
    'rule' => 'numeric',
    'message' => 'Numbers only'
),
'maxLength' => array(
    'rule' => array('maxLength', 10),
    'message' => '10 digit no'
)

答案 4 :(得分: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,})?$\/"
            )
        )
    );