FF+Firebug "Regular Expression too complex"出现错误,IE崩溃,Chrome挂起



根据这个http://www.utexas.edu/its/help/domain-name-hosting-and/847然后我做了这个正则表达式:

/^[a-z](w+.?w*[a-z0-9]){5,17}@[a-z]((a-z0-9-]{1,25}.[a-z]{2,4})|([a-z0-9-]{1,25}.[a-z]{2,3}.[a-z]{2,3}))$/;

抛出这个值:
asdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbn@yahoo.com

Firefox + firebug说"正则表达式太复杂",IE崩溃和Chrome挂起,是有什么问题的正则表达式?

缺失[

]

/^[a-z](w+.?w*[a-z0-9]){5,17}@[a-z]((

here [

a-z0-9-]{1,25}.[a-z]{2,4})|([a-z0-9-]{1,25}.[a-z]{2,3}.[a-z]{2,3}))$/;

试试这个(你的解决方案打印错误):

^[a-z](w+.?w*[a-z0-9]){5,17}@[a-z](([a-z0-9-]{1,25}.[a-z]{2,4})|([a-z0-9-]{1,25}.[a-z]{2,3}.[a-z]{2,3}))$

我想你把(a-z0-9-]{1,25}里的[给忘了

这里的实际问题(忽略缺失的[)是您有一个贪婪限定符(/w+/w*),后面跟着一个范围({5,17})

意思是:

  • 查找任意数量的w字符
  • 过滤器降至5-17

引擎只在找到"任意数字"后才进行过滤,并且在这里变得非常困惑…

这是一个奇怪的表达:(w+.?w*[a-z0-9]){5,17}{5,17}应该几乎肯定是在部分,而不是整个东西。

如果有人有像john.doe@media.company.info或jane.doe@company.office这样的电子邮件地址怎么办?

试试这个:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[x01-x08x0bx0cx0e-x1fx21x23-x5bx5d-x7f]|\[x01-x09x0bx0cx0e-x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[x01-x08x0bx0cx0e-x1fx21-x5ax53-x7f]|\[x01-x09x0bx0cx0e-x7f])+)])
http://regexpal.com/

最新更新