如果输入是整数,则测试Ruby

时间:2014-11-27 17:55:44

标签: ruby regex if-statement

我有以下功能

def getValue(x) 
    puts "Key: #{x}"
    if x =~ /[0-9]+/
        puts "x is an int"
    else
        puts "x is a string"
    end
end

在getValue(1)上它应该输出" x是一个int"但相反,我得到" x是一个字符串"

3 个答案:

答案 0 :(得分:3)

使用is_a?检查类型:

def getValue(x) 
    puts "Key: #{x}"
    if x.is_a?(Integer)
        puts "x is an int"
    else
        puts "x is a string"
    end
end

输出:

irb> getValue(1)
Key: 1
x is an int
irb> getValue("1")
Key: 1
x is a string

答案 1 :(得分:3)

左侧表达式必须为String才能将=~运算符与正则表达式一起使用。在针对正则表达式进行测试之前,在to_s上调用x

def getValue(x) 
    puts "Key: #{x}"
    if x.to_s =~ /[0-9]+/
        puts "x is an int"
    else
        puts "x is a string"
    end
end

此外,Ruby中的方法名称为snake_case,因此getValue应为get_value

如果您想检查值的类型,而不是字符串表示,则可以使用x.is_a? Integer

正则表达式建议:正如Michael Berkowski所说,你的正则表达式将匹配任何位置都有数字的字符串。您应该在\A(字符串的开头)和\Z(字符串的结尾)之间锚定模式:

\A[0-9]+\Z

更挑剔:[0-9]字符类等同于\d元字符,所以你也可以这样做:

\A\d+\Z

答案 2 :(得分:0)

您可能想测试它是否可以转换为整数,而不是它是否为:

def get_value(x)
  puts "Key: #{x}"

  # This throws an ArgumentError exception if the value cannot be converted
  Integer(x)

  puts "x is an int"

rescue ArgumentError
  puts "x is not an integer"
end