ruby-on-rails - 如何确定rails中是否有匹配返回true或false?

发布于 2024-12-03 23:20:55 字数 773 浏览 2 评论 0原文

我想创建一个测试,为电子邮件处理返回 true 或 false。

目前,如果电子邮件地址以 r+ 开头,则为 true,否则为 false。这将帮助我们的服务器忽略我们遇到的大量垃圾邮件。

示例:

[email protected] .. true
[email protected] .. true
[email protected] .. FALSE

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

谢谢

目标

是 Rails/Ruby 中的一个衬垫,具有:

ABORT if XXXXX == 0

I want to create a test that returns either true or false for email handling.

For now, if the email address starts with r+ then it's true otherwise it's false. This will help our server ignore a lot of the SPAM we are getting hit with.

Examples:

[email protected] .. true
[email protected] .. true
[email protected] .. FALSE

What's the most efficient way to handle this with Rails/ruby/regex?

Thanks

GOAL

Is a one liner in rails/ruby with:

ABORT if XXXXX == 0

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

椒妓 2024-12-10 23:20:55

这将匹配:

/^r\+.*@site.com$/

示例:

>> '[email protected]' =~ /^r\+.*@site.com$/ #=> 0
>> '[email protected]' =~ /^r\+.*@site.com$/ #=> nil

由于除了 nilfalse 之外的所有内容在 Ruby 中都是 true,因此您可以在条件中使用此正则表达式。如果你确实想要一个布尔值,你可以使用 !! 习惯用法:

>> !!('[email protected]' =~ /^r\+.*@site.com$/) #=> false
>> !!('[email protected]' =~ /^r\+.*@site.com$/) #=> true

This will match:

/^r\+.*@site.com$/

Examples:

>> '[email protected]' =~ /^r\+.*@site.com$/ #=> 0
>> '[email protected]' =~ /^r\+.*@site.com$/ #=> nil

Since everything that isn't nil or false is truthy in Ruby, you can use this regex in a condition. If you really want a boolean you can use the !! idiom:

>> !!('[email protected]' =~ /^r\+.*@site.com$/) #=> false
>> !!('[email protected]' =~ /^r\+.*@site.com$/) #=> true
魂ガ小子 2024-12-10 23:20:55

如果你在 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 的正则表达式添加了诸如前瞻之类的东西。)

If you're in Rails, there's a starts_with? method on strings:

"foo".starts_with?('f') # => true
"foo".starts_with?('g') # => false

Outside of Rails, regexes are a reasonable solution:

"foo" =~ /^f/ # => true
"foo" =~ /^g/ # => false

Because Ruby uses truthiness in if statements, if you do end up using regexes, you can just use the return value to switch:

if "foo" =~ /^f/
  puts "Was true!"
else
  puts "Was false!"
end

If you're writing a method and want to return a boolean result, you could always use the double bang trick:

def valid_email?
  !!("foo" =~ /^f/)
end

Rubular (rubular.com) is a good site for testing Ruby regexes pre-1.9. (1.9's regexes added things like lookahead.)

谜兔 2024-12-10 23:20:55

如果您不想使用“!!”运算符:

!!("foo" =~ /^f/)

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

"foo" =~ /^f/ ? true : false

If you don't want to use an "!!" operator:

!!("foo" =~ /^f/)

you could use a ternary operator (might look more obvious):

"foo" =~ /^f/ ? true : false
无声无音无过去 2024-12-10 23:20:55

您也可以使用 '===' 运算符

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

/f/ === 'bat' #=> false

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

/YOUR_REGEX/ === 'YOUR_STRING'

You can use the '===' operator as well

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

/f/ === 'bat' #=> false

Note: The regex part is on the left:

/YOUR_REGEX/ === 'YOUR_STRING'

梦途 2024-12-10 23:20:55

Regexp#match? 已添加到 Ruby-2.4.0.请参阅 Regexp#match 文档

irb(main):001:0> "ack!".match? /a(b|c)/
=> true
irb(main):002:0> "add".match? /a(b|c)/
=> false

Regexp#match? was added to Ruby-2.4.0. See Regexp#match documentation.

irb(main):001:0> "ack!".match? /a(b|c)/
=> true
irb(main):002:0> "add".match? /a(b|c)/
=> false
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文