我的蛋糕验证有问题。 用户输入例如表格字段中的“20€”,我只想获得带有欧元符号的数字“20”。但是验证方法只允许检查某些东西是否应该是它应该是什么。
我要在我的规则集中创建一个函数,但我正在努力进一步,因为函数在cake上下文中返回的是true或false,而不是像我需要的修改变量...
'rule-3' => array(
'rule' => 'checkEuro',
'message' => 'don´t need one because it should be a conversion only :-('
)
public function checkEuro($data) {
$data = str_replace('€','',$data);
return preg_replace('/[^0-9]/','', html_entity_decode($data));
}
我希望你能提供帮助。 提前致谢
答案 0 :(得分:3)
如果您只需将金额本身存储在数据库中且不欧元符号,您应该剥离欧元符号在验证之前。
您可以在模型的beforeValidate()
回调中执行此操作;
public function beforeValidate(array $options = array())
{
if (!empty($this->data[$this->alias]['FIELDNAME']) {
// Strip the euro-sign
// NOTE: should also take plain, non-entity € into account here?
$this->data[$this->alias]['FIELDNAME'] = str_replace(
'€', '', $this->data[$this->alias]['FIELDNAME']
);
}
return parent::beforeValidate($options);
}
(当然,将FIELDNAME
替换为实际的字段名称)
剥离货币符号后,使用decimal
或numeric
验证规则验证值
注意强>
如果您执行想要存储值包括货币符号,请使用核心money
验证规则。