用于验证多个电子邮件地址的正则表达式

SeT*_*ToY 23 c# regex email validation rfc

我有一个正则表达式验证我的邮件地址,如下所示:

([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)

这完全正常,但只允许输入一封电子邮件.现在我想扩展它并允许添加多个邮件地址(例如,就像MS Outlook一样),并使用分号作为邮件分割器.

mail1@tld.com;mail2@tld.com;mail3@tld.com

现在我搜索并找到了这个:

([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}(;|$))

这在一点上有效,但遗憾的是在邮件末尾需要一个分号:

mail1@tld.com;
Run Code Online (Sandbox Code Playgroud)

当用户只输入一封电子邮件时,这不是我想要的.

如何扩展我的正则表达式(第一个)以允许添加多个邮件地址,同时让它们通过分号分割?

Jot*_*aBe 54

这是您的原始表达式,已更改为允许使用分号和(可选)除分号之外的空格分隔的多封电子邮件.它还允许单个电子邮件地址不以分号结尾.

这允许空白条目(没有电子邮件地址).您可以将最终*更改为+以至少需要一个地址.

(([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)(\s*;\s*|\s*$))*
Run Code Online (Sandbox Code Playgroud)

如果你需要允许逗号,除了分号,你可以使用这个组:

(\s*;\s*|\s*$)
Run Code Online (Sandbox Code Playgroud)

通过这个:

(\s*(;|,)\s*|\s*$)
Run Code Online (Sandbox Code Playgroud)

重要提示:作为Martin评论中的状态,如果在正确的电子邮件地址列表之前或之后有其他文本,则验证不会失败.所以它可以作为"电子邮件搜索者".要使其作为验证器工作,您需要^在正则表达式的开头添加,$最后添加.这将确保表达式匹配所有文本.所以完整的reex将是:

^(([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)(\s*;\s*|\s*$))*$
Run Code Online (Sandbox Code Playgroud)

您可以在列表开头的容差空白\s*之后添加额外^的内容,就像这样.即包括^\s*而不是简单^表达式已经在最后容忍空白.

  • 这是一个稍作修改的版本,将提供与完整匹配匹配的单个捕获组。它还是锚定的,因此整个输入必须与模式匹配,这很有用,因为您正在验证输入。`^((?:(?:[a-zA-Z0-9 _ \-\。] +)@(?:(?:\ [[0-9] {1,3} \。[0-9] {1,3} \。[0-9] {1,3} \。)|(?:(?:[a-zA-Z0-9 \-] + \。)+))(?:[a -zA-Z] {2,4} | [0-9] {1,3})(?:\]?)(?:\ s *; \ s * | \ s * $))*)$` (3认同)

Rob*_*ott 7

旧帖子 - 需要相同的 RegEx。接受的答案对我不起作用,但是,确实如此。

^(|([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+([;.](([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+)*$
Run Code Online (Sandbox Code Playgroud)

然而,从这篇文章中检索到,接受的答案也不起作用,但帖子内链接上的正则表达式起作用了。

abc@abc.com - 验证

abc@abc.com;123@qwer.com - 验证

abc@abc.com; - 不验证

empty string - 验证

如果要针对空字符串进行验证,请删除|正则表达式开头的


Pra*_*enu 5

请尝试这个

^([\w+-.%]+@[\w-.]+\.[A-Za-z]{2,4};?)+$
Run Code Online (Sandbox Code Playgroud)

  • 这将允许 2 封电子邮件,它们之间没有“;”。 (2认同)