我有一个带有电子邮件模式验证器的输入。 (正则表达式^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$
)
如果我输入一封很长的无效电子邮件,表单就会崩溃。 令人惊讶的是,它可以很好地用于长时间的有效输入。
以前有没有人经历过这个?如果有,请分享您的解决方法。
提前致谢。
答案 0 :(得分:0)
试试这个:^\w+(?:[\.-]\w+)*@\w+(?:[\.-]\w+)*(?:\.\w{2,3})+$
崩溃必须与你的正则表达式的效率。特别是?
之后的那些[\.-]
是不必要的,并且导致比必要的更多重复。一些正则表达式适用于匹配解决方案,但catastrophically backtrack在显示不匹配的字符串时。
编辑:其他两个解决方案对Angular不起作用,因为它是Javascript正则表达式,但它们仍然可用于一般参考。
最好,使用possessive quantifiers:^\w++(?:[\.-]\w++)*@\w++(?:[\.-]\w++)*(?:\.\w{2,3})+$
排名第二,atomic groups:^(?>\w+)(?:[\.-](?>\w+))*@(?>\w+)(?:[\.-](?>\w+))*(?:\.\w{2,3})+$