2011-06-19 20 views
4

我试图验证输入用户给我的程序通过gets是一个整数。据我所知,is_a?(Integer)不起作用,因为gets从用户那里得到一个字符串,所以即使用户输入一个有效的整数(以字符串形式),它也会一直返回false。有人会认为我可以简单地在输入上使用to_i并完成它,但是这引发了另一个问题 - "75akjfas".to_i结果在75。所以如果我依靠to_i解决我的问题,任何以数字开头的东西都可以工作。优雅的方式来检查用户输入的字符串是否是ruby中的整数?

如何清楚地验证该值是一个整数而不是数字和字母的组合?或者我需要诉诸正则表达呢?

+0

可能的重复[ruby 1.9.2有is_a吗?函数?](http://stackoverflow.com/questions/4282273/does-ruby-1-9-2-have-an-is-a-function) –

回答

6

s.to_i.to_s == s怎么样?但我更喜欢regex。

+0

我没有理由不使用正则表达式。我只是希望有一个很好的帮手功能,我想念的地方:)。 – sepiroth

6
print "Enter an integer (or try to sneak by something other): " 
puts Integer(gets) rescue puts "Hey, that's not an integer!" 
+0

我只是添加了一个报价[来自文档](http://ruby-doc.org/core/classes/Kernel.html#M001434):“字符串应严格符合数字表示。这种行为是不同的String#to_i“ – matt

1

使用正则表达式,你可以做这样的:

class String 
    def integer? 
    !!(self =~ /^[-+]?[0-9]+$/) 
    end 
end 
-2

红宝石可以不用深奥的解决方案:

Integer是一个整数

1970.is_a?Integer 
true 

字符串不是整数

"1970".is_a?Integer 
false 

字符串整数是一个整数

"1970".to_i.is_a?Integer 
true 
+1

这似乎不完全正确。 @LyleDickie写道这是一个建议编辑: 不幸的是“字符串到整数是一个整数”部分是不正确的。如果你在IRB中运行它,它会返回true。但是,如果用户输入“197e”,它也会评估为真。 ''' “197e”.to_i.is_a?整数 true ''' – oligofren

+1

“a”.to_i是0,它仍然是一个整数。 – kgpdeveloper

0

检查如何由用户使用所检查的字符串输入
提出“输入一个号码:”这个代码示例 USER_INPUT = gets.chomp 校验= (user_input.to_i.to_s == USER_INPUT)

while (!check) do 
puts("Wrong Input, Pls, Enter a number: ") 
user_input = gets.chomp 
    check = (user_input.to_i.to_s == user_input) 
end 

if user_input.to_i < 0 
puts "Number is negative" 
elsif user_input.to_i > 0 
puts "Number is positve" 
else 
puts "Number is Zero" 
end 
+0

您提供的链接会产生应用程序错误。也许这只是一个过去的情况,但要考虑它是否是一个需要纠正的持久问题。此外,您提供的链接与答案中的示例代码之间的联系并不十分清楚。他们是一样的吗?编辑你的答案,以清楚说明。 – J0e3gan

+1

谢谢@ J0e3gan我已经删除了链接,它显示了同样的事情,只是你可以在那里运行它...我注意到链接对我来说是私人的。 – user3410041

相关问题