使用正则表达式作为条件循环(直到)

时间:2011-07-31 21:29:09

标签: ruby regex loops conditional

我正在尝试使用正则表达式作为内部(直到)循环的条件。 基本上,这是输入数字密码..

我试过这段代码

   print "Password: "
   x = gets.chomp.to_i
   until (/^[\d]+(\.[\d]+){0,1}$/ === "#{x}") == "true"
      print "Only numbers allowed, Password: "
      x = gets.chomp.to_i
   end

但不幸的是它没有用。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您不应该与字符串"true"进行比较。实际上在Ruby中,您几乎不需要明确地与truefalse进行比较,因为这是布尔表达式所评估的内容。另请注意,to_i可能无法达到预期效果:

"adsfasf34".to_i #=> 0
"1adsfasf34".to_i #=> 1

你可以做的是这样的事情:

print "Password: "
until (x = gets.chomp) =~ /^[\d]+(\.[\d]+){0,1}$/
  print "Only numbers allowed, Password: "
end
x = x.to_i

答案 1 :(得分:1)

当然这不起作用。 ===(“triqual”)等同于“与同一类别”。那么你在做什么就是询问Ruby是否

 (a class of this regex is the same as the class of the string) equals string "true"

在这种情况下的内部比较是拙劣的,并且永远不会开始(Regexp和一个字符串永远不会是同一个类),外部的也不会工作(Ruby没有像ECMAscript的{{{ 1}})。

对于Ruby中的条件,记住这一点很方便:评估除undefinednil之外的任何其他表达式都是正确的!所以正则表达式匹配运算符会很好(当没有找到匹配时返回false,这就是你要找的东西,以及找到匹配时的偏移量 - 而Ruby中的任何整数都是“真实的,甚至是0。

确实如此,

nil