2011-08-17 143 views
5

this question类似,但不确定如何在这种情况下实现。如何从文本中解析/裁剪电子邮件地址

受信任的用户(不需要关心验证输入)是将电子邮件地址输入/粘贴到文本字段中。在模糊事件上,我想查看文本并清理他输入的任何内容(通常是在从电子邮件客户端复制并粘贴地址列表之后)。

"Bob Smith" <[email protected]>, [email protected], "John Doe"<[email protected]>

可能会被缩减到:

[email protected], [email protected], [email protected]

回答

-2
myEmailList=userInput.match(/[a-zA-z0-9_.][email protected][a-zA-Z0-9_.]+\.(com|org|whatever)/g); 
myEmailListString=myEmailList.join(', '); 

或者只是做的第一线,如果你想要的电子邮件地址的数组。

+4

请不要让你自己的正则表达式来解析邮件地址。真的吗? (COM |组织|什么)? –

+2

是的,无论他想插入什么顶级域名,“无论”都是一个占位符。虽然,新的裁决和几十万美元,“任何”都可能是顶级域名。 :) –

+2

确切地说,这不是我不明白“无论”,只是**我猛烈地不同意这种做法。** –

4

此正则表达式应该删除在双引号里的东西以及<>字符。

/".*?"|[<>]/ 

在Javascript中,你可能有几行内容:

line.replace(/".*?"|[<>]/g, ''); 
+0

这并不重要。上面的正则表达式将删除存在的任何尖括号。任何未包含尖括号的电子邮件地址都不会发生任何变化。 –

+0

@Mark,这是javascript吗?它看起来更像是php ... – snumpy

+0

对不起,我错过了这是Javascript而不是PHP。我已经更新了在JS中展示它。 –

4

有效的电子邮件地址可以是非常奇怪,所以我建议不禁止在该领域的任何东西,否则可能很可能是你的程序是无用的,因为你的用户将无法发送电子邮件,以有效的电子邮件地址。

要阅读整个故事see this blog post或自己去参加RFC。

+2

我的印象是,这不是一种面向所有用户的面向用户的表单。而是一个人用来大量输入一堆数据的形式。所以,虽然我认为你提出了很好的观点,但我不知道这是否是一个问题。 –

+0

马你是对的,但是对于一个程序员被欺骗写入令人讨厌的软件来说很容易,这对用户来说只是一个烦恼。带有不必要的复杂逻辑的智能软件有时是一个问题,特别是如果智能软件不够智能,无法正确使用,并且无法规避和禁用这种半智能功能。 – 6502

1

可以使用.math()方法将电子邮件很快解析出到一个数组:

inputval.match(/[A-z0-9][email protected][A-z0-9]+.[A-z]{2,3}/g) 

如果你想然后再转换为字符串,您可以添加.join(', ').join('; ')它。正则表达式被简化了。有相当多的正则表达式来解析邮件,但上面的是简化版本。如下面的评论或多部分顶级域名(它也没有考虑电子邮件地址的第一部分中的+符号),它没有考虑子域名。用符合您需求的正则表达式替代。

+0

不符合[email protected] –

+0

@CodeGuy你是对的。我确实注意到正则表达式非常简化。电子邮件正则表达式是一打一毛钱,可以很容易地取代我上面的东西。我没有明确表达的一点是'.match'会返回匹配。这是解析简单电子邮件地址的简单方法,这正是OP所要求的。虽然我鼓励其他人编辑我的答案,如果他们能够改进他们,确切的正则表达式不是我的答案的焦点。无论如何,如果你想添加一个更好的正则表达式来改进我在这里的内容,请随时这样做。 –

3
var emailList = userInput 
    .replace(/[^,;]*.?</g, "") 
    .replace(/>/g, "") 
    .replace(/[,; ]{1,}/g, "\n") 
    .replace(/[\n]{2,}/g, "\n") 
    .split("\n") 

这允许在下列格式(包括 复制和粘贴邮件列表从您谷歌的方格)将要提供的电子邮件列表:

"Bob Rob"<[email protected]>, [email protected]; [email protected] [email protected] 

电子邮件ID可以由,分离, ;或换行符。

相关问题