如何确保我不能通过用户输入 ruby 将整数或任何数字添加到数组中

How to ensure I can't add in integers or any numbers into an array via user input for ruby

提问人:Rothbury Estate 提问时间:3/29/2022 更新时间:4/25/2022 访问量:74

问:

我正在尝试创建一个只允许字符串传递的数组,根本不允许数字。有没有办法使这成为可能?

我已经尝试了以下方法,期望如果一个整数通过,那么它就会引发错误,但是我忘记了“gets”方法将所有内容转换为字符串。


    exercise_list = []
    loop do 
        exercise_input = gets.strip.capitalize
        if exercise_list.include?(exercise_input) == false && exercise_input.is_a?(Integer) == false 
            exercise_list << exercise_input
            p exercise_input.class
        else exercise_input == "quit"
            break
        end
    end
数组 ruby exception 整数

评论


答:

0赞 Siim Liiser 3/30/2022 #1

返回自的值始终是一个字符串。即使输入“1”,它也只是字符串“1”。检查它是否总是假的。exercise_inputgets.strip.capitalize.is_a?(Integer)

这就是它不起作用的原因,但是,让它工作取决于您的要求。什么是整数?

“1”显然是,但是“1 2”、“1 a”、“1”、“1”、“1.1”、“1,1”、“0x1a”、“01”呢?

如果你想让 ruby 为你做决定,你可以尝试通过调用将其转换为整数,如果它不是整数,则可以挽救错误。Integer(exercise_input)

否则,我建议您使用正则表达式来检查字符串是否包含您想要的内容。

0赞 Fabio Fiestas 4/25/2022 #2

在处理字符串时,正则表达式会非常有帮助。 因此,您有一个始终是字符串的输入。例如。“asd12” 所以你可以问字符串里面是否有数字,如果有,你传递给下一个输入,如果没有,你把它附加到数组中。

在 elseif 语句中,您询问是否存在与任何数字 (/\d/) 匹配的问题,如果有,则传递到下一次迭代。

这是一个网站,您可以在其中练习正则表达式:www.rubular.com

这是我的代码

exercise_list = []

loop do
  print ">. "
  exercise_input = gets.strip.capitalize
  if exercise_input == 'Quit'
    break
  elsif exercise_input.match?(/\d/)
    next
  else
    exercise_list << exercise_input
  end
end
pp  exercise_list

我希望它对您有所帮助。

PD. print (“>. ”) 它只是为了可视化