仅当字符串数组由数字组成时才接受它们

时间:2015-10-06 23:20:26

标签: arrays ruby regex

我正在尝试编写一个if条件,如果其所有元素都是数字,则接受字符串数组。如果它不是数字,则应在"incorrect input"中返回else。之后,我会将这些数字转换为整数以获得平方根。这就是我写的:

def square(string)
if string =~ /^\d+$/
  m = string.split(",").map(&:to_i).sort
  if m.count == 4 && m.each_cons(2).all? {|a, b| b == a + 1 }
    d = m.inject{|c,v| c*v}
    g = d + 1
    r = Math.sqrt(g).to_i
    puts "#{g}, #{r}"
  else
    puts 'not consecutive'
  end
 else
 puts 'incorrect input'
 end
end

square("3,0,1,0")

2 个答案:

答案 0 :(得分:-1)

正则表达式store仅检查一个整数。您需要执行以下操作:

/^\d+$/

包含逗号。

此外,如果您想要包含实数:

/^\d+(,\d+)*$/   

答案 1 :(得分:-2)

所以这不会起作用,因为你只留下一个数字的空间。您需要在\ d之后添加+以允许任意数量的数字。加号表示正则表达式检查一个或多个符合加号之前的字符的字符。您可以通过以下方式完成此任务:

if string =~ /^\d+$/
    do_stuff
end