长期无效输入崩溃 - Angular 表单验证

Long invalid input crash - Angular form validation

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

如果我输入一个很长的无效电子邮件,表单将会崩溃。 令人惊讶的是,它对于长时间有效输入也能正常工作。

有没有人遇到过这种情况?如果有,请分享您的解决方法。

提前致谢。

试试这个:^\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})+$