我试图为电子邮件验证构建一个正则表达式,我还有几个条件需要检查:
3.a.“人物”。如果不是第一个或最后一个字符,则允许提供。
3.b.".“不连续出现两次或两次以上
3.c.".“必须在域名中至少出现一次。
我创建了以下正则表达式:
^[a-zA-Z0-9_'-]{1}[a-zA-Z0-9._'-]*([^.]@[^._])([a-zA-Z0-9_.'-])+[.]{1}[a-zA-Z0-9_'-]{2,}$ 我没有涵盖所有章节,不包括3.b节。
有效电子邮件示例: ya.ll.t.j@gg.cc无效电子邮件示例: ya..l.f@dd.cc,y.s.sss...@kk.dd
谢谢
发布于 2019-01-28 08:38:15
在模式开始时,要对.*\.{2}进行负面展望,以确保在一行中不会有两个.:
(?!.*\.{2})还需要进行一些修复和优化。通过在字符串开始时对(单个) .使用负前瞻,您可以避免重复字符集两次(因为第一个与第二个相同,只是没有.)。
仅负字符集就可以匹配集合中没有的任何字符--例如,在[^.]之前,您的@可以匹配换行符,这显然是不可取的。相反,要确保@之前的最后一个字符不是.,请使用另一个字符集:
^(?!.*\.{2})(?!\.)[a-z0-9_.'-]*[a-z0-9_'-]@(在现代环境中,您可以在.上反向查找@,类似于第一种技术,以避免重复类似的字符集,但JS的查找功能还不是到处都支持)
同时使用不区分大小写的标志,以避免在任何地方都使用[a-zA-Z。全文:
^(?!.*\.{2})(?!\.)[a-z0-9_.'-]*[a-z0-9_'-]@(?!_)(?:[a-z0-9_'-]+\.)+[a-z0-9_'-]{2,}$https://stackoverflow.com/questions/54397942
复制相似问题