如何创建允许字段为空的验证规则,但如果不是,则需要为数字且长度为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'
)
)
效果很好但是当字段为空时,它仍然运行验证。
谢谢,
三通
答案 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,})?$\/"
)
)
);