【发布时间】:2021-03-05 12:08:12
【问题描述】:
我有以下简单的电子邮件验证正则表达式:/(.+){2,}@(.+){2,}\.(.+){2,}/
这在 Firefox、Chrome 等上运行良好,但在 Safari 上失败。
为什么这个完全有效的正则表达式会在 Safari 上失败?我在正则表达式中找不到 Safari 不支持的元素。
/(.+){2,}@(.+){2,}\.(.+){2,}/.test('123@abc.nl');
以上在 Safari 上失败,但在任何其他浏览器上都没有。
【问题讨论】:
-
正则表达式很糟糕,你永远不应该这样量化
(.+)。应该写成/.{2,}@.{2,}\..{2,}/ -
尽管如此,Safari和其他浏览器的行为应该不会不一致吧?
-
Safari 真的不喜欢这些群体。
-
不,不同的正则表达式引擎对灾难性的回溯倾向模式有不同的容忍度。
标签: javascript regex safari backtracking