长无效输入崩溃 - 角度表单验证

时间:2018-05-04 01:23:02

标签: regex angular angular-reactive-forms

我有一个带有电子邮件模式验证器的输入。 (正则表达式^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$

如果我输入一封很长的无效电子邮件,表单就会崩溃。 令人惊讶的是,它可以很好地用于长时间的有效输入。

以前有没有人经历过这个?如果有,请分享您的解决方法。

提前致谢。

1 个答案:

答案 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})+$