我正在使用以下正则表达式来验证电子邮件地址。
/^\w+([\.-]?\w+)*@\w+([\.-]?w+)*(\.\w{2,3})+$/
Javascript代码:
var email = 'myname@company.com';
var pattern = /^\w+([\.-]?\w+)*@\w+([\.-]?w+)*(\.\w{2,3})+$/;
if(pattern.test(email)){
return true;
}
当我提供以下无效电子邮件时,正则表达式的评估速度很快:
aseflj#$kajsdfklasjdfklasjdfklasdfjklasdjfaklsdfjaklsdjfaklsfaksdjfkasdasdklfjaskldfjjdkfaklsdfjlak@company.com
我在名称中间添加了#$
然而,当我尝试评估此电子邮件时,它会花费太长时间,并且浏览器会挂起。
asefljkajsdfklasjdfklasjdfklasdfjklasdjfaklsdfjaklsdjfaklsfaksdjfkasdasdklfjaskldfjjdkfaklsdfjlak@company.com1
我相信正则表达式是正确的,但不确定为什么在评估第二个示例时需要这么长的时间。如果我提供长度较短的电子邮件,它会快速评估。请参见以下示例:
(我在末尾添加了com1
)
dfjjdkfaklsdfjlak@company.com1
请帮助我解决性能问题。
?
似乎也解决了灾难性回溯问题(即使用/^\w+([\.-]?\w+)*@\w+([\.-]?w+)*(\.\w{2,3})+$/
替代)。我不确定这对您是否足够好,或者它是否无法通过任何测试用例。但它以一种微不足道的方式解决了主要的性能问题。@James Hay 的方法可能更好。 - GregL[\.-]?
дёӯеҺ»жҺү?
гҖӮиҝҷжҳҜдёҖз§ҚеҸҜиғҪеҜјиҮҙзҒҫйҡҫжҖ§еӣһжәҜзҡ„жҪңеңЁжқҘжәҗгҖӮ - nhahtdh