从Firefox 4开始,正则表达式会抛出""正则表达式太复杂"错误

As of Firefox 4, regular expression throws ""Regular expression too complex" error

本文关键字:quot 正则表达式 错误 复杂 Firefox 开始      更新时间:2023-09-26

我有以下电子邮件地址验证器,当要计算的字符串达到一定长度时,它不会计算并抛出上述错误:

^(['w'-]+)(['.'w'-'+]+)*@(['w'-]+'.){1,5}([A-Za-z]){2,4}$

很容易复制。将正则表达式与长电子邮件地址(如juicy.cakeballs2@cheeze-party.poonalicious.com

)一起放入http://regexpal.com/

这个问题是Firefox 4+特有的

谁能建议也许一种方法来简化正则表达式或其他方式来解决这个问题?

它把我撕成碎片了,丽莎!

问题在于重叠的类。[ab]+[abc]+可以用许多不同的方式匹配"ababababc"。为了减少回溯,将其重构为[ab]+(c[ab]*)*之类的东西。(我知道,重构后的表达式与原始表达式并不完全匹配相同的字符串。懒得贴一个合适的例子。谷歌"regex回溯",不,现在就买弗里德尔的书)。

为了记录,想要在JavaScript中"验证"我的电子邮件地址的表单大多数时候都失败了。我已经数不清有多少次我不得不创建一个临时电子邮件地址,只是为了能够完成购买或订阅。验证电子邮件地址的唯一可靠方法是尝试发送电子邮件。请不要再创建一个不完整的表单"validator"了。

技术上有效的地址:

*@example.com
me@had.to.create.a.temp.address.again.i.run.my.own.dns.example.net
you.forgot@domain.example.museum