我希望它是正确的JavaScript正则表达式模式,以便在以下电子邮件地址方案中进行验证
我尝试了以下正则表达式模式,但并未验证所有上述情况
/^[_a-z0-9]+(\.[_a-z0-9]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/
有人可以帮我解决哪里做错了吗
答案 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]+)
...
至于电子邮件地址的域部分,那里也有类似的故事...如果您试图将包含两个标签(yahoo
和com
)的域与期望三个 ...将会失败,因为标签少了一个,对吧?有些域名也只包含一个标签,您可能也想将其识别为电子邮件地址,例如localhost
...
您知道,您可以深入了解一个非常深的兔子漏洞,尝试解析电子邮件地址,这对this question and answer sequence的影响很大。如果您使用正则表达式来使其变得复杂...我认为也许更好的工具是适当的解析器生成器...否则,请编写以下:
@
字符@
字符匹配的模式(这将帮助您学习如何避免与.
相关的错误).
相关的错误)