验证整数输入Ruby上的字符串

时间:2017-06-26 18:04:52

标签: ruby string validation integer

我在Ruby上练习一点,我想处理年龄的输入,例如,如果有人输入" 11"而不是11,我想要显示一条消息,该人知道他/她不能使用字符串。

这是我的代码

saludo = "Hola ¿Como te llamas?"

puts saludo
STDOUT.flush
#STDOUT es una constante global que almacena las salidas del programa. flush vacía cualquier dato almacenado, y por lo tanto, limpiará cualquier resultado anterior.
nombre = gets
STDOUT.flush
puts "Entonces te llamas #{nombre}"

puts "¿Cuantos años tienes?"
edad = Integer(gets.chomp)
#gets.chomp elimina el /n de gets
#El .to_i pasa el String a Integer
if edad > 0
  if edad >= 18
    puts "Eres mayor de edad, puedes votar y esas cosas"
  else
    puts "Tienes que moverte con el permiso de tus padres."
  end
else
  puts "prueba"
end    

6 个答案:

答案 0 :(得分:2)

我一直都是这样做的。将方法添加到String类以进行检查可以使事情变得更容易。

class String
  def is_i?
    !!Integer(self)
    rescue ArgumentError, TypeError
      false
  end
end

puts "1".is_i?
puts "asda".is_i?

有些人可能不喜欢它,因为它使用异常,但我认为没关系。

答案 1 :(得分:1)

如果要检查输入的数据类型,可以使用以下内容:

input = gets.chomp
input.class == Fixnum

因为ruby中的每个输入都被视为一个字符串,你可以使用to_i将输入转换为整数,如:

input = gets.to_i

检查输入值是否为0,这是转换为整数的字符串所采用的默认值,如下所示:

if input == 0
puts("Please enter an integer")

答案 2 :(得分:0)

如果Integer(gets.chomp)如果gets.chomp不是严格的整数字符串(即1,2,-12等),则会input_string = gets.chomp edad = nil begin edad = Integer(input_string) rescue puts "#{input_string} is not an integer" end # edad will still be nil if there was a problem ,这会引发错误

所以你可以这样做:

Newtonsoft.Json

答案 3 :(得分:0)

如果您正在使用gets,并且您希望收到一个数字,将其解析为整数,那么您可以跳过"跳过" chomp这样使用gets.to_i,你可以用整数转换用户的输入,你可以看到所有不是数字的东西都转换为0 ,因此您可以在操作后edad检查edad.zero?是否为puts '¿Cuantos años tienes?' edad = gets.to_i if edad.zero? puts 'Debes ingresar un número' end ,并以这种方式显示您的消息:

edad

您可以将until初始化为0,然后使用edad创建一个循环,要求用户输入一个数字,这样,当until取非零值时来自edad = 0 until !edad.zero? puts '¿Cuantos años tienes?' edad = gets.to_i if edad.zero? puts 'Debes ingresar un número' end end puts edad 循环的代码输出,您可以通过下一步:

train_op

答案 4 :(得分:0)

input = gets.chomp

if input != "0" && input.to_i == 0
    puts "Invalid age format. Integer expected"
else
    age = input.to_i
end

答案 5 :(得分:0)

更多Ruby方式

使用case-expression,您可以将输入与字符串范围进行比较,从而无需使用String#to_i

#age.rb
loop do
  puts 'Enter age'
  case gets.chomp
  when /\D/
    puts 'Digits only, try again', '======================'
  when '0'..'17'
    puts 'too young'
    break
  when '18'..'120'
    puts 'old enough'
    break
  else
    puts 'Invalid age, try again', '======================'
  end
end

使用Kernel#loop可确保您在输入有效年龄之前继续询问用户输入内容。有效年龄在case-expression中定义为0 - 120。如果输入了有效年龄,则循环将被break打破。

运行代码

$ ruby age.rb
Enter age
eleven
#Digits only, try again
#======================
Enter age
10000
#Invalid age, try again
#======================
Enter age
5
#too young

$ ruby vote.rb
Enter age
35
#old enough