检查我的变量是整数还是字符串

时间:2016-12-10 16:27:46

标签: ruby

我需要检查我的变量是Integer还是String。 下面的代码将打破循环,而不会警告我非法字符。任何人都可以帮我找到错误吗?

x = 0
while x == 0        
  name = gets.chomp.capitalize 
  if name.empty?
    puts "No input. Try again"
  elsif name.is_a? Integer
    puts "Illegal character: Integer "
  else 
    x = 1 
  end               
end 

2 个答案:

答案 0 :(得分:3)

因为gets返回一个字符串,你需要找出字符串是否代表一个数字(而且只是一个数字)。

首先,将您的字符串转换为to_i的整数。请注意,对于不包含数字的字符串,to_i会返回0。在第二步中,检查将此整数转换回字符串是否与原始字符串匹配

 string.to_i.to_s == string

请注意,这只是一个简单的示例,例如字符串00无效。

另一种方法可能是检查字符串是否只包含数字。这可以通过使用正则表达式来完成:

string.match(/\A\d+\z/)

答案 1 :(得分:1)

您可以这样做:

loop do
  puts "Enter name"
  name = gets.chomp
  if name.empty?
    puts "No input, try again"
  elsif name.scan(/\d+/).any?
    puts "Illegal character: Integer"
  else
    raise StopIteration
  end
end

情况下表达

或者使用case-expression来整理。

loop do
  puts "Enter name"
  case gets.chomp
  when ''
    puts "No input, try again"
  when /\d/
    puts "Illegal character: Integer"
  else
    raise StopIteration
  end
end

有关详细信息,请参阅String#scanArray#any?StopIteration