【问题标题】:Long invalid input crash - Angular form validation长时间无效输入崩溃 - 角度表单验证
【发布时间】:2021-10-22 18:43:55
【问题描述】:

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

如果我输入了一个冗长的无效电子邮件,表单将会崩溃。 令人惊讶的是,它适用于长时间有效的输入。

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

提前致谢。

【问题讨论】:

  • 你能展示一下正则表达式是如何被使用的吗?另外,“长”到底有多长?相对较短的无效电子邮件地址不会崩溃?
  • 我建议尝试这里显示的模式:stackoverflow.com/questions/46155/…
  • @kshetline 是的,像 10 或 15 个字符这样的短电子邮件可以正常工作。我用“thisismyveryveryveryverylongemail”进行了测试,它从“long”开始滞后,并在我到达“email”时正式崩溃。
  • @wp78de 谢谢,该模式对于 30 多个字符也失败
  • 全部?链接问题的答案有很多种。

标签: regex angular angular-reactive-forms


【解决方案1】:

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

【讨论】:

  • 感谢您的回答。我试过你的正则表达式,当它达到 30 多个字符时它仍然崩溃。我会看看链接。
  • 抱歉没有深入调查。结果证明这是一个具有错误正则表达式的依赖输入。你的答案是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多