长期无效输入崩溃 - 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})+$
我有电子邮件模式验证器的输入。 (正则表达式 ^\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})+$