Javascript 如何从文本中解析/修剪电子邮件地址

Javascript 如何从文本中解析/修剪电子邮件地址,javascript,parsing,email,Javascript,Parsing,Email,类似于,但不确定在这种情况下如何实现 一个受信任的用户(不需要关心验证输入)正在文本字段中键入/粘贴电子邮件地址。在blur事件中,我想查看文本并清理他输入的内容(通常是在从电子邮件客户端复制和粘贴地址列表之后) “鲍勃·史密斯”,joe@company.com,“John Doe” 将被削减至: bob@company.com, joe@company.com, john@company.com此正则表达式应删除双引号中的任何字符以及字符 /".*?"|[<>]/ /“*?”|[

类似于,但不确定在这种情况下如何实现

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

“鲍勃·史密斯”,joe@company.com,“John Doe”

将被削减至:


bob@company.com, joe@company.com, john@company.com

此正则表达式应删除双引号中的任何字符以及
字符

/".*?"|[<>]/
/“*?”|[]/
在Javascript中,您可能有以下内容:

line.replace(/".*?"|[<>]/g, '');
行。替换(/“*?”|[]/g,”);

或者,若你们想要一个电子邮件地址的数组,只需执行第一行。

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


阅读全文或亲自阅读RFC。

您可以使用
.math()
方法将电子邮件快速解析为一个数组:

inputval.match(/[A-z0-9]+@[A-z0-9]+.[A-z]{2,3}/g)
如果要将其转换为字符串,可以向其添加
.join(',')
.join(';')
。正则表达式被简化了。有相当多的正则表达式用于解析电子邮件,但上面的一个是一个简化版本。它不考虑以下注释中指出的子域或多部分TLD(也不考虑电子邮件地址第一部分中的
+
符号)。替换为符合您需要的正则表达式。

var emailList=userInput
var emailList = userInput
    .replace(/[^,;]*.?</g, "")
    .replace(/>/g, "")
    .replace(/[,; ]{1,}/g, "\n")
    .replace(/[\n]{2,}/g, "\n")
    .split("\n")
.替换(/[^,;]*.?/g,”) .replace(/[,;]{1,}/g,“\n”) .replace(/[\n]{2,}/g,“\n”) .split(“\n”)
这允许以以下格式提供电子邮件列表(包括 将电子邮件列表从您的邮箱复制并粘贴到邮箱):

“鲍勃·罗布”,job@company.com; rob@company.com job@somewhere.com

电子邮件ID可以用
分隔,或换行符。

这并不重要。上面的正则表达式将删除存在的任何尖括号。任何没有尖括号的电子邮件地址都不会发生任何变化。对不起,我没有注意到这是Javascript而不是PHP。我已经更新以在JS中显示它。@马克,我必须承认,我最喜欢这个答案;然而,我发现一些客户(例如gmail的web界面)没有在引号中加上姓名,所以我决定使用一个稍微健壮一点的@Jonathan's answerNo Conferences:)这个答案最彻底地解决了你的问题。@snumpy,请随意在我的答案中添加一个编辑,以反映你的修改。谢谢。我的印象是,这不是一个面向所有用户的表单。而是一个人用来大量输入数据的一种形式。所以,虽然我认为你的观点很好,但我不知道这是否是一个问题。也许你是对的,但是程序员很容易被欺骗,编写令人讨厌的软件,这对用户来说只是一种烦恼。带有不必要的复杂逻辑的智能软件有时会出现问题,特别是如果它很智能,但不够智能,无法正确使用,并且无法避免和禁用这种半智能。请不要使用自己的正则表达式来解析电子邮件地址。认真地(com | org | whater)?是的,“whater”是他想要插入的TLD的一个位置持有者。虽然,根据新的裁决和几十万美元,“无论如何”可能是TLD确切地说,并不是我不理解“whatever”,而是我强烈地不同意这种方法。此外,有一些有效的地址,这个表达式甚至不接近匹配。请不要这样胡闹,冷静点,兄弟。这里有足够的空间添加您的答案。不匹配Blow@example.coms.co.nr@你是对的。我注意到正则表达式非常简单。电子邮件正则表达式是一毛钱一打,可以很容易地取代我上面的。我没有明确表达的一点是,
.match
将返回匹配项。这是一种解析简单电子邮件地址的简单方法,OP就是这么要求的。虽然我鼓励其他人编辑我的答案,如果他们可以改进的话,但确切的正则表达式并不是我答案的重点。无论如何,如果你想添加一个更好的正则表达式来改进我这里的内容,请随意添加。
var emailList = userInput
    .replace(/[^,;]*.?</g, "")
    .replace(/>/g, "")
    .replace(/[,; ]{1,}/g, "\n")
    .replace(/[\n]{2,}/g, "\n")
    .split("\n")
"Bob Rob"<bob@company.com>, job@company.com; rob@company.com job@somewhere.com