我想检查天气变量是否包含有效数字。
我可以正确验证null和空白但不能将文本验证为“整数”...
我试过了:
if(params[:paramA].blank? || (params[:paramA].is_a?(Integer)) )
我还试过is_numeric,is_numeric(string),is_number?和其他方式...... 但没有成功......
答案 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
,-12
,12.12
,1e-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?
或String
或Integer
上的Float
方法,它可以完全满足您的需求。
123.numeric?
# => true
123.45.numeric?
# => true
"123".numeric?
# => true
"123.45".numeric?
# => true
"a1213".numeric?
# => false
<强>更新强>
我的不好,我有一个肮脏的环境,上面的工作如果装载mongoid版本3及以上。