如何在Ruby中匹配=〜

时间:2017-04-21 12:45:41

标签: ruby regex

在我的Rails应用程序中使用Ruby 2.2.4进行简单的电子邮件检查regexp。 正则表达式是:

email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

比较代码是:

email =~ email_regex

对于email bcg@yahoo.com(用于测试),上面的代码返回0,这是不相等的。但在http://rubular.com/,他们是平等的。

===会返回true

email_regex === email

为什么=~在这里不起作用?

2 个答案:

答案 0 :(得分:1)

来自红宝石String#=~文档:

  

str = ~obj→fixnum或nil

     

如果obj是正则表达式,则将其用作匹配str的模式,并返回匹配开始的位置,如果没有匹配则返回nil。

由于它返回0,这意味着找到了一个匹配项,它从索引0开始。

答案 1 :(得分:1)

是的,0可能令人困惑,但它在Ruby中是 truthy 值,就像true一样。

但是,如果您更喜欢truefalse的结果,则Ruby 2.4 +中会出现String#match?

email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
email = 'bcg@yahoo.com'

email.match? email_regex
#=> true