我想创建一个为电子邮件处理返回true或false的测试。
目前,如果电子邮件地址以r +开头,那么它是真的,否则它是假的。这将有助于我们的服务器忽略我们遇到的很多垃圾邮件。
示例:
r+kldslkadslkadslk@site.com .. true
r+123123312@site.com .. true
vigraaaa@site.com .. FALSE
使用Rails / ruby / regex处理此问题的最有效方法是什么?
由于
目标
带有导轨/红宝石的单个衬垫:
ABORT if XXXXX == 0
答案 0 :(得分:34)
这将匹配:
/^r\+.*@site.com$/
示例:
>> 'r+kldslkadslkadslk@site.com' =~ /^r\+.*@site.com$/ #=> 0
>> 'vigraaaa@site.com' =~ /^r\+.*@site.com$/ #=> nil
由于Ruby中不是nil
或false
的所有内容都是真实的,因此您可以在条件中使用此正则表达式。如果你真的想要一个布尔值,你可以使用!!
成语:
>> !!('vigraaaa@site.com' =~ /^r\+.*@site.com$/) #=> false
>> !!('r+kldslkadslkadslk@site.com' =~ /^r\+.*@site.com$/) #=> true
答案 1 :(得分:10)
如果你在Rails中,有一个starts_with?字符串上的方法:
"foo".starts_with?('f') # => true
"foo".starts_with?('g') # => false
在Rails之外,正则表达式是一个合理的解决方案:
"foo" =~ /^f/ # => true
"foo" =~ /^g/ # => false
因为Ruby在if语句中使用了真值,如果你最终使用正则表达式,你可以只使用返回值来切换:
if "foo" =~ /^f/
puts "Was true!"
else
puts "Was false!"
end
如果您正在编写方法并希望返回布尔结果,则可以始终使用双重技巧:
def valid_email?
!!("foo" =~ /^f/)
end
Rubular(rubular.com)是测试1.9之前的Ruby正则表达式的好网站。 (1.9的正则表达式增加了诸如前瞻性的东西。)
答案 2 :(得分:8)
如果你不想使用“!!”操作者:
!!("foo" =~ /^f/)
你可以使用三元运算符(可能看起来更明显):
"foo" =~ /^f/ ? true : false
答案 3 :(得分:7)
您也可以使用'==='运算符
/f/ === 'foo' #=> true
/f/ === 'bat' #=> false
注意:正则表达式部分位于左侧:
/ YOUR_REGEX / ==='YOUR_STRING'
答案 4 :(得分:1)
Regexp#match?
已添加到Ruby-2.4.0。参见Regexp#match documentation。
irb(main):001:0> "ack!".match? /a(b|c)/
=> true
irb(main):002:0> "add".match? /a(b|c)/
=> false