我想简单地检查表单文本字段中的返回值是否为数字,即:12,12.5或12.75。有没有一种简单的方法可以检查这一点,特别是如果将值拉为param
?
答案 0 :(得分:182)
您可以使用
12.is_a? Numeric
(Numeric
适用于整数和浮点数。)
如果它作为可能包含有效数字表示的字符串到达,则可以使用
class String
def valid_float?
true if Float self rescue false
end
end
如果您可以将字符串转换为有效的浮点数(例如,使用'12'.valid_float?
),则然后to_f
将返回true。
答案 1 :(得分:23)
只需正则表达,它是微不足道的,除此之外不值得思考:
v =~ /\A[-+]?[0-9]*\.?[0-9]+\Z/
(根据贾斯汀的评论修正)
答案 2 :(得分:23)
这些天我通常只使用Integer和Float。
1.9.2p320 :001 > foo = "343"
=> "343"
1.9.2p320 :003 > goo = "fg5"
=> "fg5"
1.9.2p320 :002 > Integer(foo) rescue nil
=> 343
1.9.2p320 :004 > Integer(goo) rescue nil
=> nil
1.9.2p320 :005 > Float(foo) rescue nil
=> 343.0
1.9.2p320 :006 > Float(goo) rescue nil
=> nil
答案 3 :(得分:16)
您可以添加:
validates_numericality_of :the_field
在您的模型中。
请参阅:http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M002172
答案 4 :(得分:7)
Just convert string twice:
num = '12'
num == num.to_i.to_s
#=> true
num = '3re'
num == num.to_i.to_s
#=> false
答案 5 :(得分:5)
我会建议这个
def is_number?
self.to_f == self
end
> 15.is_number?
=> true
> 15.0.is_number?
=> true
> 'Not a number'.is_number?
=> false
> (0/0.0).is_number?
=> false
答案 6 :(得分:5)
irb(main):005:0> 1.1.is_a? Numeric
=> true
irb(main):006:0> 1.is_a? Numeric
=> true
irb(main):007:0> 'asd'.is_a? Numeric
=> false
答案 7 :(得分:-4)
字符串值始终使用.to_i
转换为0[14] pry(main)> 'Apple'.to_i > 0
=> false
[15] pry(main)> '101'.to_i > 0
=> true