我有以下简单的电子邮件验证正则表达式:/(.+){2,}@(.+){2,}\.(.+){2,}/
这在Firefox、Chrome等浏览器上运行良好,但在Safari上失败。
为什么这个完全有效的正则表达式在Safari上会失败?我在regex中找不到Safari不支持的元素。
/(.+){2,}@(.+){2,}\.(.+){2,}/.test('123@abc.nl');
上面在Safari上失败,但在任何其他浏览器上都不会。
发布于 2021-03-05 13:29:47
不同的正则表达式引擎对灾难性的回溯倾向模式有不同的容忍度。
这是一个灾难性的易于回溯的模式,因为您使用{2,}
量词来量化(.+)
,该量词使(.+)
匹配两次或更多次(也就是说,匹配一次或多次两次或更多次,这使得它在不匹配的模式下失败得非常慢)。
如果要匹配任意两个或更多字符,请量化.
模式,而不是.+
模式:
/.{2,}@.{2,}\..{2,}/
或者,使用现有的email validation patterns.。
https://stackoverflow.com/questions/66492332
复制相似问题