我正在尝试验证用户通过gets
提供程序的输入是一个整数。据我所知,is_a?(Integer)
不起作用,因为gets
从用户获取一个字符串,所以即使用户输入一个有效的整数(以字符串形式),它也总是返回false。有人会认为我可以在输入上使用to_i
并完成它,但这又引发了另一个问题 - "75akjfas".to_i
导致75
。因此,如果我依靠to_i
来解决我的问题,任何以数字开头的东西都会有用。
如何干净地验证该值是否仅为整数,而不是数字和字母的组合?或者我是否需要诉诸正则表达式?
答案 0 :(得分:6)
s.to_i.to_s == s
怎么样?不过我更喜欢正则表达式。
答案 1 :(得分:6)
print "Enter an integer (or try to sneak by something other): "
puts Integer(gets) rescue puts "Hey, that's not an integer!"
答案 2 :(得分:1)
使用正则表达式,你可以这样做:
class String
def integer?
!!(self =~ /^[-+]?[0-9]+$/)
end
end
答案 3 :(得分:1)
您可以使用Integer()
,但需要注意十六进制,二进制或八进制输入。 http://ruby-doc.org/core-2.3.1/Kernel.html#method-i-Integer
def valid_integer?(string)
begin
!!Integer(string)
rescue ArgumentError
false
end
end
答案 4 :(得分:0)
检查此代码示例,了解如何使用用户输入的检查字符串
puts"输入一个数字:"
user_input = gets.chomp
check =(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
答案 5 :(得分:-2)
Ruby可以在没有深奥的解决方案的情况下做到这一点:
整数是一个整数
1970.is_a?Integer
true
字符串不是整数
"1970".is_a?Integer
false
String to integer是一个整数
"1970".to_i.is_a?Integer
true