根据这个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/