开发者

elegant way to check if a string inputed by user is an integer in ruby?

I'm trying to validate that the input a user gives my program via gets is an integer. is_a?(Integer) does not work, as far as i can tell, because gets gets a string from the user, so it will always return false even if the user enters an valid integer (in string form). One would think I could simply use to_i on the input and be done with it, but that raises another issue - "75akjfas".to_i results in 75. So if I relied on to_i to solve my problems, anything starting with numbers will work.

How do I c开发者_JAVA百科leanly validate that the value is an integer only, and not a combination of numbers and letters? Or do I need to resort to regex for this?


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


How about s.to_i.to_s == s? I'd prefer regex however.


Using regex you could do it like this:

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


You could use Integer() but you need to be careful with hex, binary, or octal input. 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


Check this code example for how to use the checked string input by the user
puts "Enter a number: " 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


Ruby can do it without esoteric solutions:

Integer is a integer

1970.is_a?Integer
true

String is not a integer

"1970".is_a?Integer
false

String to integer is a integer

"1970".to_i.is_a?Integer
true
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜