所以我希望用户的答案只包括0到9之间的数字..我该怎么做?

时间:2017-11-22 14:36:53

标签: ruby

正如我在标题中所要求的那样。当用户输入一些仅包含数字的值时,如何创建一个循环,如果不是,则会再次尝试。

prompt = "> "
    puts "What is the salary for the accountant: "
    print prompt 
    while accountant = gets.chomp

      if accountant == (0..9)
        puts "Nice"

        break

      else 
        "try again"
        print prompt
      end 
    end 

      end 

2 个答案:

答案 0 :(得分:1)

没有正则表达式的简单解决方案是:

accountant.chars.all?{|n| ("0".."9") === n}

您可能想了解" ===" Ruby中的运算符,如果你不知道它是如何工作的,因为如果你来自PHP或Javascript,它可能会让你感到困惑。
What does the "===" operator do in Ruby?

答案 1 :(得分:0)

你的问题在这一行:

if accountant == (0..9)

这是检查相等的值范围 - 这不是你想要的。

由于来自gets.chomp的输入始终是字符串,您需要检查它是否只包含字符:"0""1",{{ 1}},...和"2"

一种方法是使用正则表达式:

"9"
  • if accountant =~ /\A\d+\z/ 表示“字符串开头”
  • \A表示“字符串结束”
  • \z表示“一个或多个数字”(0-9)

请注意,您在评论\d+中建议的解决方案存在以下缺陷:

  • /^-?[0-9]+$/表示“的开头”(因此可以在换行符之前插入任意其他字符
  • ^表示“的结尾”(因此可以在换行符之后插入任意其他字符
  • $还允许使用可选的连字符。在这种情况下,大概是你想要的东西,因为输入是薪水 - 肯定不会是负面的!