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

时间:2011-08-05 04:21:25

标签: javascript regex firefox

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

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

重现起来很容易。将正则表达式放入http://regexpal.com/以及juicy.cakeballs2@cheeze-party.poonalicious.com

等长电子邮件地址

问题特定于Firefox 4 +

任何人都可以建议一种简化正则表达式或其他方法来解决问题的方法吗?

它正在撕裂我,丽莎!

1 个答案:

答案 0 :(得分:5)

问题在于重叠的类。 [ab]+[abc]+可以通过多种不同方式匹配“ababababc”。要减少回溯,请将其重构为[ab]+(c[ab]*)*之类的内容。 (我知道,重构的表达式与原始表达式的字符串完全不匹配。懒得发布一个正确的例子。谷歌“正则表达式回溯”,不,购买并阅读Friedl,现在)。

对于记录,希望在JavaScript中“验证”我的电子邮件地址的表单大部分时间都会失败。我无法计算为了能够​​完成购买或订阅而创建临时电子邮件地址的次数。验证电子邮件地址的唯一可靠方法是尝试发送电子邮件。请不要再创建一个破损的表单“验证器”。

技术上有效的一些示例地址:

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