我想为用户创建一个循环,直到他给我一个数字。但我不知道检查它是数字还是字符串的正确方法。 这样的事情。
puts "Enter your age."
age = gets.chomp.to_i
while age.empty?
age = gets.chomp.to_i
end
空方法会导致错误。
答案 0 :(得分:3)
使用以下代码:
cssSelector("select[title=\"Sort By\"]")
答案 1 :(得分:2)
const regex = /messageid=(\d+)/g
const messageId = regex.exec(body)[1]
的Kernel#loop通常用于此类任务。
break
如果输入r = /
\A # match beginning of string
[1-9] # match a digit greater than zero
\d* # match zero or more digits
$ # match end of line
/x # free-spacing regex definition mode
loop do
print "Enter your age: "
age = gets[r]
break age.to_i unless age.nil?
end
,则终端中的行显示如下:
"34\n"
见Kernel#print。如果使用Kernel#puts,则会显示以下内容。
Enter your age: 34
请注意,第一个锚点(Enter your age:
34
)匹配字符串的开头,而第二个锚点(\A
)匹配行的结尾。 (混合字符串和行锚的开头和结尾是不寻常的。)可以改为写$
,其中age = gets.chomp[/\A\d+\z/]
匹配字符串的结尾。
答案 2 :(得分:1)
如果您需要过滤负整数,您可以检查输入是否仅包含数字。例如:
age = nil
loop do
puts "Enter your age: "
age = gets.chomp
break if (age.scan(/\D/).empty? & !age.empty?)
end
puts "Your age is #{age}"
age = nil
需要初始化变量并在循环外部使用。或者需要使用@age
。
.scan(/\D/)
生成一个数组,其中包含字符串的每个单个字符,而不是数字\D
。因此,如果数组为空,则表示该字符串仅由数字组成。例如:
p "my age is 30".scan(/\D/) #=> ["m", "y", " ", "a", "g", "e", " ", "i", "s", " "]
p "30".scan(/\D/) #=> []