在ruby中,检查字符串是否为有效数字

时间:2014-02-18 12:21:51

标签: ruby-on-rails ruby validation parameters

我想检查天气变量是否包含有效数字。

我可以正确验证null和空白但不能将文本验证为“整数”...

我试过了:

if(params[:paramA].blank? || (params[:paramA].is_a?(Integer)) )

我还试过is_numeric,is_numeric(string),is_number?和其他方式...... 但没有成功......

4 个答案:

答案 0 :(得分:3)

我看到了这样的补丁:

class String
  def is_number?
    true if Float(self) rescue false
  end
end

if (params[:paramA].blank? || !params[:paramA].is_number?)

或没有补丁:

if (params[:paramA].blank? || (false if Float(params[:paramA]) rescue true))

它支持12-1212.121e-3等。

答案 1 :(得分:3)

如果您的参数适用于ActiveRecord模型,那么您应该使用validates_numericality_of。否则...

你只想要整数,对吗?怎么样:

if (params[:paramA].blank? || params[:paramA] !~ /^[+-]?\d+$/)

也就是说,检查参数是由可选的+还是-组成,后跟一个或多个数字,还有其他内容。

答案 2 :(得分:1)

如果您要做的事情是:

I want to check weather variable contains a valid number or not.

您可以使用regex获取它。见here

s = 'abc123'

if s =~ /[-.0-9]+/         # Calling String's =~ method.
  puts "The String #{s} has a number in it."
else
  puts "The String #{s} does not have a number in it."
end

答案 3 :(得分:1)

在导轨中,您可以使用numeric?StringInteger上的Float方法,它可以完全满足您的需求。

123.numeric?
# => true
123.45.numeric?
# => true
"123".numeric?
# => true
"123.45".numeric?
# => true
"a1213".numeric?
# => false

<强>更新

我的不好,我有一个肮脏的环境,上面的工作如果装载mongoid版本3及以上。