优雅的方法来检查用户输入的字符串是否是ruby中的整数?

时间:2011-06-19 23:25:09

标签: ruby

我正在尝试验证用户通过gets提供程序的输入是一个整数。据我所知,is_a?(Integer)不起作用,因为gets从用户获取一个字符串,所以即使用户输入一个有效的整数(以字符串形式),它也总是返回false。有人会认为我可以在输入上使用to_i并完成它,但这又引发了另一个问题 - "75akjfas".to_i导致75。因此,如果我依靠to_i来解决我的问题,任何以数字开头的东西都会有用。

如何干净地验证该值是否仅为整数,而不是数字和字母的组合?或者我是否需要诉诸正则表达式?

6 个答案:

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