2013-12-19 13 views
-1

我正在使用Ruby on Rails创建一个大学独家网站,通过他们的“.edu”电子邮件将所有注册用户分类到他们特定的大学。几乎所有美国的大学都有一个“xyz.edu”电子邮件域。实质上,每个用“.edu”电子邮件注册的人都会被归类为类似的“domain.edu”。如何对.edu电子邮件域进行排序?

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

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

我将不胜感激任何帮助或反馈,我可以得到。

+0

您可以使用正则表达式来匹配模式,而不是对事物进行排序。当然,您可以使用Ruby根据您使用正则表达式所做的匹配对事物进行排序。 –

+0

你写了什么代码? “关于您编写​​的代码问题的问题必须在问题本身中描述具体问题 - 并包含有效代码以再现问题本身。请参阅http://SSCCE.org以获取指导。” –

回答

2

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

"[email protected]" =~ /.*@(.*)$/ 

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

但是,您必须考虑的是如何处理像[email protected][email protected]这样的案例。

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

+0

您可以使用'“[email protected]”.scan(/.*@(?。*)$ /)'然后''domain.split('。')[ - 2]'。它将返回'harvard'的展位:'gates @ harvard.edu'和'gates @ seas.harvard.edu'。 – Hauleth

+1

@ŁukaszNiemier,您还可以在正则表达式中使用负面查找来解析仅TLD。我给出了我的解决方案,因为不清楚OP需要什么。也许他想保留二级名字...... –

+0

我的解决方案保留二级名称。更多,它保存所有域名部分。 – Hauleth

1

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

array_of_emails = ['[email protected]', '[email protected]', '[email protected]', '[email protected]' ] 
array_of_emails.sort_by! { |email| "#{email[email.index('@')..-1]}#{email[0..email.index('@')]}" } 

编辑:改变排序! sort_by!

+1

'sort_by'在这里比较好。 – Amadan

1

在未来,处理域名将变得复杂得多,新的TLD即将上线。假设.edu是唯一的教育顶级域名将是错误的。

一个简单的方法来抓住刚域现在是:

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

将要处理的事情,如:

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

如果你不想做@,只是转移左括号正确的一个字符:

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

如果要规范域t Ø剥离子域,你可以这样做:

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时间和磁盘空间处理无效地址?

相关问题