Mis*_*hko 2 regex validation ruby-on-rails ruby-on-rails-3
我有以下产品价格验证:
class Product < ActiveRecord::Base
...
PRICE_REGEX = /^([1-9]\d{0,5}|0)(\.\d{1,2})?$/
validates :price, :presence => true, :format => PRICE_REGEX
...
end
Run Code Online (Sandbox Code Playgroud)
它应该允许价格0来999999.99.
但是,如果我输入hello,则验证通过,并0.00保存在数据库中.
但:presence验证工作正常.
我在这里错过了什么?
price列是一个浮点数,因此Rails会自动将字符串"hello"转换为float,如下所示"hello".to_f # => 0.0.然后将其转换回字符串"0.0",这显然与正则表达式匹配.
通常,在非字符串列上使用正则表达式是个坏主意.相反,使用validates_numericality_of.如果您想要与正则表达式相同的限制,请执行以下操作:
class Product < ActiveRecord::Base
validates_numericality_of :price, :greater_than => 0, :less_than => 1000000
end
Run Code Online (Sandbox Code Playgroud)
它不仅更安全,而且更容易阅读和遵循.请注意,如果空白,它也会自动拒绝价格.
| 归档时间: |
|
| 查看次数: |
1512 次 |
| 最近记录: |