在我的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
为什么=~
在这里不起作用?
答案 0 :(得分:1)
来自红宝石String#=~
文档:
str = ~obj→fixnum或nil
如果obj是正则表达式,则将其用作匹配str的模式,并返回匹配开始的位置,如果没有匹配则返回nil。
由于它返回0
,这意味着找到了一个匹配项,它从索引0
开始。
答案 1 :(得分:1)
是的,0
可能令人困惑,但它在Ruby中是 truthy 值,就像true
一样。
但是,如果您更喜欢true
或false
的结果,则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