我觉得这会更容易找到,但我很惊讶它不是.
我如何测试一个字符串是否是模型外的数字(包括小数)?
例如
is_number("1") # true is_number("1.234") # true is_number("-1.45") # true is_number("1.23aw") #false
在PHP中,有is_numeric,但我似乎无法在Ruby(或Rails)中找到等价物.
到目前为止,我已经阅读了以下答案,并且没有更接近:
> Ruby on Rails – Validate a Cost
> Ruby/Rails – How can you validate against decimal scale?
> invalid decimal becomes 0.0 in rails
解决方法
您可以借用
NumericalityValidator
Rails用于验证数字的想法,它使用
Kernel.Float
方法:
def numeric?(string) # `!!` converts parsed number to `true` !!Kernel.Float(string) rescue TypeError,ArgumentError false end numeric?('1') # => true numeric?('1.2') # => true numeric?('.1') # => true numeric?('a') # => false
它还处理以科学记数法书写的符号,十六进制数字和数字:
numeric?('-10') # => true numeric?('0xFF') # => true numeric?('1.2e6') # => true