正则表达式仅在 Safari 上失败
Posted
技术标签:
【中文标题】正则表达式仅在 Safari 上失败【英文标题】:Regex fails only on Safari 【发布时间】: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 真的不喜欢这些群体。
不,不同的正则表达式引擎对灾难性的回溯倾向模式有不同的容忍度。
【参考方案1】:
不同的正则表达式引擎对灾难性回溯倾向模式具有不同的容忍度。
当您使用 2,
量化 2,
量化 (.+)
时,您的模式是一种灾难性的回溯倾向模式,这使得 (.+)
匹配两次或更多次(即匹配一次或多次两次或更多次,这使得它非常失败慢慢地用不匹配的模式。)
如果您要匹配任何两个或多个字符,请量化 .
模式而不是 .+
一个:
/.2,@.2,\..2,/
或者,使用现有的email validation patterns.。
【讨论】:
以上是关于正则表达式仅在 Safari 上失败的主要内容,如果未能解决你的问题,请参考以下文章