如何确定在rails中是否存在匹配返回true或false?

AnA*_*ice 19 ruby regex ruby-on-rails gsub ruby-on-rails-3

我想创建一个测试,返回true或false以进行电子邮件处理.

现在,如果电子邮件地址以r +开头,那么它是真的,否则它是假的.这将有助于我们的服务器忽略我们遇到的很多垃圾邮件.

例子:

r+kldslkadslkadslk@site.com .. true
r+123123312@site.com .. true
vigraaaa@site.com .. FALSE
Run Code Online (Sandbox Code Playgroud)

使用Rails/ruby​​/regex处理此问题的最有效方法是什么?

谢谢

目标

是导轨/红宝石中的一个衬垫:

ABORT if XXXXX == 0
Run Code Online (Sandbox Code Playgroud)

Mic*_*ohl 34

这将匹配:

/^r\+.*@site.com$/
Run Code Online (Sandbox Code Playgroud)

例子:

>> 'r+kldslkadslkadslk@site.com' =~ /^r\+.*@site.com$/ #=> 0
>> 'vigraaaa@site.com' =~ /^r\+.*@site.com$/ #=> nil
Run Code Online (Sandbox Code Playgroud)

由于Ruby中的所有内容都不是nil或者false是真的,你可以在一个条件下使用这个正则表达式.如果你真的想要一个布尔值,你可以使用这个!!成语:

>> !!('vigraaaa@site.com' =~ /^r\+.*@site.com$/) #=> false
>> !!('r+kldslkadslkadslk@site.com' =~ /^r\+.*@site.com$/) #=> true
Run Code Online (Sandbox Code Playgroud)


Kyl*_*yle 10

如果你在Rails中,有一个starts_with?字符串上的方法:

"foo".starts_with?('f') # => true
"foo".starts_with?('g') # => false
Run Code Online (Sandbox Code Playgroud)

在Rails之外,正则表达式是一个合理的解决方案:

"foo" =~ /^f/ # => true
"foo" =~ /^g/ # => false
Run Code Online (Sandbox Code Playgroud)

因为Ruby在if语句中使用了真值,如果你最终使用正则表达式,你可以使用返回值来切换:

if "foo" =~ /^f/
  puts "Was true!"
else
  puts "Was false!"
end
Run Code Online (Sandbox Code Playgroud)

如果你正在编写一个方法并希望返回一个布尔结果,你总是可以使用双重技巧:

def valid_email?
  !!("foo" =~ /^f/)
end
Run Code Online (Sandbox Code Playgroud)

Rubular(rubular.com)是测试1.9之前的Ruby正则表达式的好站点.(1.9的正则表达添加了诸如前瞻之类的东西.)


Evm*_*rov 8

如果你不想使用"!!" 运营商:

!!("foo" =~ /^f/)
Run Code Online (Sandbox Code Playgroud)

你可以使用三元运算符(可能看起来更明显):

"foo" =~ /^f/ ? true : false
Run Code Online (Sandbox Code Playgroud)


Low*_*der 7

您可以使用"==="操作符,以及

/f/ === 'foo' #=> true

/f/ === 'bat' #=> false
Run Code Online (Sandbox Code Playgroud)

注意:正则表达式部分位于左侧:

/ YOUR_REGEX/==='YOUR_STRING'