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

4

我希望修正我的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})$/

请问有人能帮我看看这个问题出在哪里吗?

这是我的错误之处吗?

1
似乎是一个重复的问题!你有检查过以下链接吗?- https://dev59.com/3HVD5IYBdhLWcg3wOo9h - Marcus
2
可能是如何在JavaScript中验证电子邮件地址?的重复问题。 - jayarjo
可能是JavaScript正则表达式电子邮件验证的重复问题。 - Shibon
请注意,上述提到的参考主题不考虑本地部分中的Unicode字符。另请参见RFC6531中的SMTPUTF8。 - Marcus
3个回答

2
以下正则表达式应该可以实现:

以下正则表达式应该可以实现:

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

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

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


0

我一直使用这个,但请注意它不会在转义Unicode时触发:

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

你可以在这里看到它的工作原理:https://regex101.com/r/caa7b2/4


在2012年,作为RFC6531的一部分,引入了在本地部分使用国际字符的功能。 - Marcus

0

首先,[_a-z0-9]+ 会匹配大多数测试案例中的用户名字段。进一步测试用户名字段内容将导致不匹配。如果你编写期望两个用 . 分隔的字段的模式,则只有提供两个. 分隔的字段时它才能匹配,而不是其他任何东西。请注意这一点。我认为你可能想把.放在第一个字符集中,并省略此处的部分:(.[_a-z0-9]+)...

至于电子邮件地址的域部分,在那里也有类似的情况……如果您试图将包含两个标签(yahoocom)的域与期望有三个标签的模式进行匹配……它将失败,因为标签数目少了一个,对吧?还有一些仅包含一个标签的域名,你可能希望将其识别为电子邮件地址,比如localhost......

你知道吗,当你试图解析电子邮件地址时,你可能会陷入一个非常深的兔子洞,就像这个问题和答案序列所描述的那样。如果你使用正则表达式使它变得复杂...我认为更好的工具是一个合适的解析器生成器...否则,请编写以下内容

  1. 匹配任何字符直到 @ 字符
  2. 匹配 @ 字符(这将帮助你避免与 . 相关的错误)
  3. 匹配所有字符(这将帮助你理解与 . 相关的错误)
  4. 按照上述顺序组合以上三个模式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接