【问题标题】:Custom - Javascript regular expression to validate custom email addresses自定义 - 用于验证自定义电子邮件地址的 Javascript 正则表达式
【发布时间】:2019-08-27 04:23:26
【问题描述】:

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

谁能帮我解决一下哪里做错了?

【问题讨论】:

标签: javascript angular6


【解决方案1】:

以下正则表达式应该这样做:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 在本地部分使用国际字符已于 2012 年作为 RFC6531 的一部分引入
    【解决方案3】:

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

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

    你知道,有一点你可以在尝试解析电子邮件地址时挖出一个非常深的兔子洞,这与this question and answer sequence 的效果非常相似。如果您使用正则表达式使这个复杂化...我认为更好的工具可能是适当的解析器生成器...否则,请编写以下:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 2017-01-12
      • 2016-10-09
      • 1970-01-01
      • 2017-07-12
      • 2021-11-09
      • 2012-06-22
      相关资源
      最近更新 更多