拆分文本区域为名字和电子邮件

问题描述:

我有其中一个用户进入一些电子邮件地址(强制性)和名(可选)文本区域。如何分割字符串以获得电子邮件地址和名称的数组(或散列),并考虑到它可能包含错误?到目前为止,我可以把它分成数组,如果没有名字被允许:拆分文本区域为名字和电子邮件

emails = @request_feedback.emails.split("\r\n") 
emails.each {|email| 
    if (email =~ /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i) 
    FeedbackMailer.get_feedback(current_user, email, employee_id).deliver 
    end 
} 
+2

使用组您正则表达式如果允许用户输入数据以自由形式的方式,那么确实没有办法可靠地捕获电子邮件和名称。正则表达式模式旨在查找文本中经常出现的模式,但它们可能没有模式匹配的内容。没有几个文本样本,我们无法帮助你,因为我们可以想象完全不同的数据。 – 2013-03-05 14:52:15

+0

锡文是正确的。如果可能的话,大量考虑将你的文本区域重构为离散的组。 – verbsintransit 2013-03-05 18:27:19

+0

我思考的内容分成地址和名称的过程,它是一个后 - 行为试图将数据恢复到可用的格式的时候,相反,你需要修复您捕获数据的方式。正如@verbsintransit所说,将您的文本区域重构为离散的组。我会使用一个单独的“输入电子邮件:”文本输入和一个“可选名称:”文本输入。用户点击“添加”按钮,然后将数据聚合到JavaScript哈希中,并将它们添加到文本区域。用户完成后,将散列作为JSON字符串发送给您的代码。问题解决了。 – 2013-03-05 18:52:50

你需要使用括号

emails.each {|email| 
    if (email =~ /\A([\w+\-.]+)@([a-z\d\-.]+)\.[a-z]+\z/i) 
     FeedbackMailer.get_feedback($1, email, $2).deliver 
    end 
} 
+0

这个正则表达式无法接近实际地址。请参阅“[正则表达式使用与正则表达式滥用](http://www.codinghorror.com/blog/2005/02/regex-use-vs-regex-abuse.html)”和“[我知道如何验证电子邮件地址,直到我读了RFC(http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx)”。 – 2013-03-05 17:59:29

+0

谢谢。我想我没有准确地解释我的问题。我不会让他们随机输入地址和名称。他们将有一个模式,即“电子邮件(名称)”。我对正则表达式不是很有信心,需要帮助将text_area /字符串解析为带有可选名称的电子邮件,并处理任何用户输入错误,即)) – grabury 2013-03-05 19:18:28