我正在尝试使用正则表达式作为内部(直到)循环的条件。 基本上,这是输入数字密码..
我试过这段代码
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
但不幸的是它没有用。
有什么想法吗?
答案 0 :(得分:4)
您不应该与字符串"true"
进行比较。实际上在Ruby中,您几乎不需要明确地与true
或false
进行比较,因为这是布尔表达式所评估的内容。另请注意,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中的条件,记住这一点很方便:评估除undefined
或nil
之外的任何其他表达式都是正确的!所以正则表达式匹配运算符会很好(当没有找到匹配时返回false
,这就是你要找的东西,以及找到匹配时的偏移量 - 而Ruby中的任何整数都是“真实的,甚至是0。
确实如此,
nil