如何排序.edu电子邮件域名?

时间:2013-12-19 02:29:24

标签: ruby-on-rails ruby regex email email-validation

我正在使用Ruby on Rails创建一个大学专属网站,通过他们的“.edu”电子邮件将所有注册用户分类到他们的特定大学。几乎所有在美国的大学都有一个“xyz.edu”电子邮件域名。从本质上讲,每个注册了“.edu”电子邮件的人都会被归类为类似的“domain.edu”。

我已经搜索了一个正则表达式来寻找like-domains.edu并将它们分配到变量或特定索引中,但我必须在错误的地方查找,因为我找不到如何执行此操作。

我会使用正则表达式吗?或者也许是他们的电子邮件验证后的方法?

我希望得到任何帮助或反馈。

4 个答案:

答案 0 :(得分:2)

可以使用正则表达式来提取域名:

"gates@harvard.edu" =~ /.*@(.*)$/

这个简单的正则表达式将捕获@符号后面的所有内容。你可以experiment more with this regexp here

但是,您需要考虑的是如何处理gates@harvard.edu vs gates@seas.harvard.edu等案例。

我的示例会将它们解析为不同的实体:harvard.edu vs seas.harvard.edu

答案 1 :(得分:1)

我可能会继续创建一个能够容纳这些用户的机构/大学/团队模型。现在比以后更容易。但是,为了回答你的问题,你可以做类似的事情:

array_of_emails = ['d@xyz.edu', 'a@abc.edu', 'c@xyz.edu', 'b@abc.edu' ]
array_of_emails.sort_by! { |email| "#{email[email.index('@')..-1]}#{email[0..email.index('@')]}" }

编辑:改变排序! to sort_by!

答案 2 :(得分:1)

未来,处理域将变得更加复杂,新的顶级域名(TLD)将投入使用。假设.edu是唯一的教育TLD将是错误的。

现在抓住域名的简单方法是:

"gates@harvard.edu"[/(@.+)$/, 1] # => "@harvard.edu"

这会处理以下事情:

"gates@mail.harvard.edu"[/(@.+)$/, 1] # => "@mail.harvard.edu"

如果您不想要@,只需将左括号右移一个字符:

pattern = /@(.+)$/
"gates@harvard.edu"[pattern, 1] # => "harvard.edu"
"gates@mail.harvard.edu"[pattern, 1] # => "mail.harvard.edu"

如果要规范化域以剥离子域,可以执行以下操作:

pattern = /(\w+\.\w+)$/
"harvard.edu"[pattern, 1] # => "harvard.edu"
"mail.harvard.edu"[pattern, 1] # => "harvard.edu"

只能抓住最后两个"单词"由单个.分隔。

这有点天真,因为非美国域名可以有国家代码,所以如果你需要处理那些,你可以做类似的事情:

pattern = /(\w+\.edu(?:\.\w+)?)$/
"harvard.edu"[pattern, 1] # => "harvard.edu"
"harvard.edu.cc"[pattern, 1] # => "harvard.edu.cc"
"mail.harvard.edu.cc"[pattern, 1] # => "harvard.edu.cc"

并且,您是否应该在验证他们的地址之前或之后执行此操作?这样做 AFTER 。为什么浪费你的CPU时间和磁盘空间处理无效地址?

答案 3 :(得分:0)

array_of_emails = ['d@xyz.edu', 'a@abc.edu', 'c@xyz.edu', 'b@abc.edu' ]
x = array_of_emails.sort_by do | a | a.match(/@.*/)[0] end
x.each do |a|
  puts a
end