Rails正则表达式包含

时间:2013-08-09 23:59:24

标签: ruby-on-rails ruby

我根据用户的电子邮件查找MX记录,以确定他们是否使用Gmail。 mx服务器记录如下:

ASPMX.L.GOOGLE.com
ALT1.ASPMX.L.GOOGLE.com
ALT2.ASPMX.L.GOOGLE.com
ASPMX2.GOOGLEMAIL.com
ASPMX3.GOOGLEMAIL.com
alt4.gmail-smtp-in.l.google.com
alt3.gmail-smtp-in.l.google.com
alt2.gmail-smtp-in.l.google.com
gmail-smtp-in.l.google.com
alt1.gmail-smtp-in.l.google.com

非谷歌邮件服务器发回的内容如下:

mx2.emailsrvr.com
mx1.emailsrvr.com
nil

确定其中一个mx记录是否包含google mx记录的好方法是什么。我一直在努力:

  if mx.any? {|server| server.exchange.to_s.include? "google"} then
    return true
  end

这不起作用,因为它需要完全匹配。任何优雅的想法?感谢

1 个答案:

答案 0 :(得分:3)

假设mx是一个数组:

mx.any? { |server| server.exchange.to_s.downcase.include? "google" }

应该有效。顺便说一句,因为any?方法返回truefalse,您不需要显式返回true,只需返回any?方法的值

示例:

[
  "ASPMX.L.GOOGLE.com", 
  "ALT1.ASPMX.L.GOOGLE.com", 
  "ALT2.ASPMX.L.GOOGLE.com", 
  "ASPMX2.GOOGLEMAIL.com", 
  "ASPMX3.GOOGLEMAIL.com", 
  "alt4.gmail-smtp-in.l.google.com", 
  "alt3.gmail-smtp-in.l.google.com", 
  "alt2.gmail-smtp-in.l.google.com", 
  "gmail-smtp-in.l.google.com", 
  "alt1.gmail-smtp-in.l.google.com" 
]
array.any? { |server| server.include? "google" }
# => true
array.any? { |server| server.downcase.include? "google" }
# => true
array.all? { |server| server.include? "google" }
# => false
array.all? { |server| server.downcase.include? "google" }
# => true