验证整数长度

时间:2016-06-02 04:00:42

标签: ruby

Hello Everyone,

我有另一个Ruby问题。 我想确保用户输入是5个数字,如果它或多或少我希望它输出错误。我可能有错误的循环我有时会感到困惑。

我必须使用Integer(gets.chomp)吗?
因为我从用户那里得到整数时也看到过。

<小时/> 这是我的代码:     #!/ usr / bin / env ruby​​

print "What is your zip code? "
zip_code = gets.chomp
puts zip_code
zip_code_array = zip_code.split

unless zip_code_array.length == 5
  puts "Error"
else
  puts "Good"
end

3 个答案:

答案 0 :(得分:3)

邮政编码不是整数。它是一个五位数的字符串。*例如,00911是一个有效的邮政编码(圣胡安,波多黎各),但它在任何实际意义上都不是整数。

然后,正确的解决方案是不检查字符串是否是特定大小的整数,而是检查字符串是否为五位数。

正则表达式将简化这一点:

print "What is your zip code? "
zip_code = gets.chomp
puts zip_code

if zip_code =~ /^[0-9]{5}$/
  puts "Good"
else
  puts "Error"
end

如果你不熟悉正则表达式,这个就像这样分解:

/
  ^     # beginning of line
  [0-9] # a digit 0-9
  {5}   # repeated exactly 5 times
  $     # end of line
/x

*严格来说,邮政编码可以是五位数字或五位数字,后跟短划线和四位数字(ZIP + 4)。你应该明智地适应你的应用程序。

答案 1 :(得分:0)

您应该删除zip_code_array = zip_code.split

只有这样才能做到

unless zip_code.length == 5
  puts "Error"
else
  puts "Good"
end

问题是split方法,基于空格拆分数组,输入邮政编码时不提供空格。因此,数组长度最终等于1.

答案 2 :(得分:0)

为什么要分割zip_code不需要这样做,你必须直接检查字符串长度。

print "What is your zip code? "
zip_code = gets.chomp
puts zip_code


unless zip_code.length == 5
  puts "Error"
else
  puts "Good"
end

当您拆分zip_code时,它会将输入的字符串转换为包含一个元素的数组(例如,如果输入'123abc',然后zip_code.split将其转换为[“123abc”],它将给出长度=每次1次)

你可以写如下(选项2):

print "What is your zip code? "
p gets.chomp.length == 5 ? "Good" : "Error"