我正在使用Ruby on Rails创建一个大学专属网站,通过他们的“.edu”电子邮件将所有注册用户分类到他们的特定大学。几乎所有在美国的大学都有一个“xyz.edu”电子邮件域名。从本质上讲,每个注册了“.edu”电子邮件的人都会被归类为类似的“domain.edu”。
我已经搜索了一个正则表达式来寻找like-domains.edu并将它们分配到变量或特定索引中,但我必须在错误的地方查找,因为我找不到如何执行此操作。
我会使用正则表达式吗?或者也许是他们的电子邮件验证后的方法?
我希望得到任何帮助或反馈。
答案 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