ruby - 解析地址簿中的电子邮件

标签 ruby regex ruby-on-rails-3 rubygems

我们的应用程序有一个邀请页面,用户可以在其中导入他们的地址簿。我们正在使用外部服务来获取它们,因此它只是将结果放入文本区域。我们开始只是用逗号分隔结果,但很快发现这是行不通的,因为:

"Smith, Joe" <jsmith@example.com>, "Jackson, Joe" <jjackson@example.com>

它会在 2 个条目之间工作,但也会在它们内部拆分。只是想知道是否有一种众所周知的万无一失的方法来完成这项工作。

也许正则表达式会起作用?我很糟糕,谁能告诉我什么正则表达式会只将电子邮件提取到数组中......

像这样:

emails = recipients.scan(/.*@.*/) <<==== but i know that's not right

编辑

看起来像这样的东西可能会起作用。如果这适用于特殊情况,任何人都有任何建议:

emails = recipients.scan(/[a-z0-9_.-]+@[a-z0-9-]+\.[a-z.]+/i)

最佳答案

ruby-1.9.3-p0 :055 >   a = '"Smith, Joe" <jsmith@example.com>, "Jackson, Joe" <jjackson@example.com>';
ruby-1.9.3-p0 :056 >   b = a.scan(/<(.*?)>/).flatten
 => ["jsmith@example.com", "jjackson@example.com"] 
ruby-1.9.3-p0 :057 > c = a.scan(/"(.*?)"/).flatten
 => ["Smith, Joe", "Jackson, Joe"] 

name/email 在每个数组中的索引是相同的,因此 c[1] 是 b[1] 电子邮件的名称。

根据您的评论,他的意见如何:

ruby-1.9.3-p0 :008 > a = '"Smith, Joe" <jsmith@example.com>, "Jackson, Joe" <jjackson@example.com>';
ruby-1.9.3-p0 :009 >   b = '"test@domain.com, test2@domain.com"';
ruby-1.9.3-p0 :010 >   b.scan(/\w*@\w*\.\w*/)
 => ["test@domain.com", "test2@domain.com"] 
ruby-1.9.3-p0 :011 > a.scan(/\w*@\w*\.\w*/)
 => ["jsmith@example.com", "jjackson@example.com"] 

这与您添加到问题中的内容几乎相同,只是更加紧凑。

关于ruby - 解析地址簿中的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8345714/

相关文章:

ruby - 在散列中转换多个数组的智能方法?

ruby - 奇怪的 ruby 行为。有人可以解释一下吗?

regex - Powershell捕获多个值?

php - 删除 unicode 项目符号字符

用于在 AWK 中捕获具有一系列数字的数字的正则表达式

ruby-on-rails - 如何在rails3 select中渲染图片

javascript - 使用 AJAX 在 rails 上加载 CSRF token

ruby-on-rails - 具有范围和belongs_to的Mongoid验证唯一性

ruby - 在没有 Rails 或 Compass 的情况下使用 Twitter Bootstrap for SASS

ruby-on-rails - 为什么在Rails3.2.9 中不调用validate 函数?