自定义-用于验证自定义电子邮件地址的Javascript正则表达式

时间:2019-04-05 09:38:21

标签: javascript angular6

我希望它是正确的JavaScript正则表达式模式,以便在以下电子邮件地址方案中进行验证

  1. msekhar@yahoo.com
  2. msekhar@cs.aau.edu
  3. ms.sekhar@yahoo.com
  4. ms_sekhar@yahoo.com
  5. msekhar@cs2.aau.edu
  6. msekhar@autobots.ai
  7. msekhar@interior.homeland1.myanmar.mm
  8. msekhar1922@yahoo.com
  9. msekhar#21@autobots.com
  10. \ u001 \ u002@autobots.com

我尝试了以下正则表达式模式,但并未验证所有上述情况

/^[_a-z0-9]+(\.[_a-z0-9]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/

有人可以帮我解决哪里做错了吗

3 个答案:

答案 0 :(得分:0)

以下正则表达式应该执行:

^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$

测试:https://regex101.com/r/7gH0BR/2

编辑:我已经添加了您所有的测试用例

答案 1 :(得分:0)

我一直使用此代码,但请注意,它不会在转义的unicode上触发:

^([\w\d._\-#])+@([\w\d._\-#]+[.][\w\d._\-#]+)+$

您可以在此处查看其工作方式:https://regex101.com/r/caa7b2/4

答案 2 :(得分:0)

首先[_a-z0-9]+将匹配大多数测试用例的用户名字段。用户名字段内容的任何进一步测试都将导致不匹配。如果您编写的模式需要两个.分隔的字段,那么当您提供两个.分隔的字段并且仅 时,它将匹配。记下这一点。我认为您可能打算将.放在第一个字符集中,并在此处省略此部分:(.[_a-z0-9]+) ...

至于电子邮件地址的域部分,那里也有类似的故事...如果您试图将包含两个标签(yahoocom)的域与期望三个 ...将会失败,因为标签少了一个,对吧?有些域名也只包含一个标签,您可能也想将其识别为电子邮件地址,例如localhost ...

您知道,您可以深入了解一个非常深的兔子漏洞,尝试解析电子邮件地址,这对this question and answer sequence的影响很大。如果您使用正则表达式来使其变得复杂...我认为也许更好的工具是适当的解析器生成器...否则,请编写以下

  1. 与任何字符匹配的模式,直到一个@字符
  2. @字符匹配的模式(这将帮助您学习如何避免与.相关的错误)
  3. 可以匹配所有内容的模式(这将帮助您了解与.相关的错误)
  4. 按照显示的顺序组合上面的三个。