Activerecord 如何验证Yii中的价格(金额)mySql十进制列?

Activerecord 如何验证Yii中的价格(金额)mySql十进制列?,activerecord,validation,yii,Activerecord,Validation,Yii,我使用mySql十进制(12,4)列来保存价格值(看看Magento是如何使用的)。我想在我的ActiveRecord模型中使用Yii的规则来创建它们,但我不太确定如何做到这一点 我想我可以在设置为“float”的情况下完成,但我想看看其他人是如何做到这一点的。我没有看到真正的“货币”验证器。也许我应该验证一下长度 array('price', 'type', 'type'=>'float'), 或 建议和例子?谢谢 我自己使用了: array('price', 'type', 'typ

我使用mySql十进制(12,4)列来保存价格值(看看Magento是如何使用的)。我想在我的ActiveRecord模型中使用Yii的规则来创建它们,但我不太确定如何做到这一点

我想我可以在设置为“float”的情况下完成,但我想看看其他人是如何做到这一点的。我没有看到真正的“货币”验证器。也许我应该验证一下长度

array('price', 'type', 'type'=>'float'),

建议和例子?谢谢

我自己使用了:

array('price', 'type', 'type'=>'float'),
规则。。。如果需要,您还可以使用或组合上一个与“匹配”验证器

array('price', 'match', 'pattern'=>'fancy regex magic here'),

添加一个工作示例,因为这是一个常见问题(SO中没有很好的答案)”

其中{1,12}是整位数的范围,{0,4}是“子”单位的范围

对于0.01到9999.99的正常价格范围,请使用如下正则表达式:

'/^[0-9]{1,0}(\.[0-9]{0,2})?$/'    

参考:

对于数字验证,您可以使用:

array('price', 'numerical', 'integerOnly' => false, 'min' => 0),

如果您需要限制小数点前后的数字,那么请按照其他人的建议使用正则表达式。

啊,是的,正则表达式当然可以做到这一点……也许这就是我检查长度所需要做的。另一个想法是……关于“最大值”呢“999999999.9999的验证器?如果你确定最高价格总是那个特定的金额,我看没有问题:p除非你正在制造一个‘产品’,可能是一个购物车或其他什么,谁知道,也许你的一个用户来自一个货币膨胀得可笑的国家:PHow关于使用NumberValidator?
'/^[0-9]{1,0}(\.[0-9]{0,2})?$/'    
array('price', 'numerical', 'integerOnly' => false, 'min' => 0),