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

Arrays 仅当字符串数组由数字组成时才接受它,arrays,ruby,regex,Arrays,Ruby,Regex,我试图编写一个if条件,如果字符串数组的所有元素都是数字,则该条件接受字符串数组。如果它不是由数字组成,则应在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

我试图编写一个
if
条件,如果字符串数组的所有元素都是数字,则该条件接受字符串数组。如果它不是由数字组成,则应在
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")

所以这是行不通的,因为一个数字只剩下一个空格。您需要在\d之后添加一个
+
,以允许任意位数。加号表示正则表达式检查是否有一个或多个字符符合加号前面的条件。您可以通过以下方式完成此任务:

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

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

/^\d+(,\d+)*$/   
包括逗号

此外,如果要包括实数:

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

string==/^[\d]$/
变为
[]=/^[\d]$/
。空数组是否等于正则表达式(对象)?否。因此总是返回
false
。另外,
if
需要一个
end
。在字符串中循环,对于任何特定的字符串
“specific_string”。匹配(/^[0-9]*$/)。to_.size==“specific_string”。size
您希望
string
成为数组、字符串或正则表达式吗?您需要提供输入示例以及这些示例的预期输出。您的代码示例必须语法正确,以便我们可以尝试运行它。看起来您可能正在寻找包含逗号的字符串,但如果没有实际数据,这只是一个半教育性的猜测。请参阅“.Regex”,它类似于:“~[0-9]+~”很难说出OP想要什么,因为没有输入数据或预期输出,代码也不清楚
string
是什么。在提供这些之前,一切都是猜测。它验证
4.54.234.234.234
是否正确,而不应该。为什么人们喜欢缩短重复
^\d+(\.\d+)(,\d+(\.\d+))*$
标记(分隔符标记)*
)是编写这些构造的标准方式。您是正确的@nhahdh,我更新了我的答案以反映正确的方式我结束了对正则表达式的一点更改,因为我没有考虑负数字:/^(-?\d+,?)+$/很难说OP想要什么,因为没有输入数据或预期的输出,代码也不清楚
string
是什么。在这些被提供之前,一切都是猜测。是的,我想你是对的。我会更加小心地给出推测性的答案。