如何检查值是否为数字?

时间:2010-01-19 17:25:57

标签: ruby-on-rails ruby

我想简单地检查表单文本字段中的返回值是否为数字,即:12,12.5或12.75。有没有一种简单的方法可以检查这一点,特别是如果将值拉为param

8 个答案:

答案 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