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

Ash*_*tch 1 javascript regex firefox

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

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

它很容易重现.将正则表达式放入http://regexpal.com/以及一个很长的电子邮件地址,例如juicy.cakeballs2@cheeze-party.poonalicious.com

问题是Firefox 4+特有的

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

Lisa让我分开了!

tri*_*eee 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
Run Code Online (Sandbox Code Playgroud)