正则表达式仅在 Safari 上失败
Regex fails only on Safari
我有以下简单的电子邮件验证正则表达式:/(.+){2,}@(.+){2,}\.(.+){2,}/
这在 Firefox、Chrome 等上工作正常,但在 Safari 上失败。
为什么这个完全有效的正则表达式在 Safari 上会失败?我在正则表达式中找不到 Safari 不支持的元素。
/(.+){2,}@(.+){2,}\.(.+){2,}/.test('123@abc.nl');
以上在 Safari 上失败,但在任何其他浏览器上都不会。
不同的正则表达式引擎对灾难性回溯倾向的模式具有不同的容忍度。
当您使用 {2,}
量词量化 (.+)
时,您的模式是一种灾难性的回溯倾向模式,使 (.+)
匹配两次或多次(即两次匹配一次或多次)或更多,这使得它在不匹配的模式下失败得非常慢。)
如果您打算匹配任何两个或更多字符,请量化 .
模式而不是 .+
模式:
/.{2,}@.{2,}\..{2,}/
或者,使用现有的 email validation patterns.。
我有以下简单的电子邮件验证正则表达式:/(.+){2,}@(.+){2,}\.(.+){2,}/
这在 Firefox、Chrome 等上工作正常,但在 Safari 上失败。
为什么这个完全有效的正则表达式在 Safari 上会失败?我在正则表达式中找不到 Safari 不支持的元素。
/(.+){2,}@(.+){2,}\.(.+){2,}/.test('123@abc.nl');
以上在 Safari 上失败,但在任何其他浏览器上都不会。
不同的正则表达式引擎对灾难性回溯倾向的模式具有不同的容忍度。
当您使用 {2,}
量词量化 (.+)
时,您的模式是一种灾难性的回溯倾向模式,使 (.+)
匹配两次或多次(即两次匹配一次或多次)或更多,这使得它在不匹配的模式下失败得非常慢。)
如果您打算匹配任何两个或更多字符,请量化 .
模式而不是 .+
模式:
/.{2,}@.{2,}\..{2,}/
或者,使用现有的 email validation patterns.。