Pra*_*K M 5 javascript regex jquery email-client email-validation
我正在使用下面的正则表达式来验证电子邮件地址。
/^\w+([\.-]?\w+)*@\w+([\.-]?w+)*(\.\w{2,3})+$/
Run Code Online (Sandbox Code Playgroud)
JavaScript代码:
var email = 'myname@company.com';
var pattern = /^\w+([\.-]?\w+)*@\w+([\.-]?w+)*(\.\w{2,3})+$/;
if(pattern.test(email)){
return true;
}
Run Code Online (Sandbox Code Playgroud)
当我提供以下无效电子邮件时,正则表达式会很快进行评估:
aseflj#$kajsdfklasjdfklasjdfklasdfjklasdjfaklsdfjaklsdjfaklsfaksdjfkasdasdklfjaskldfjjdkfaklsdfjlak@company.com
Run Code Online (Sandbox Code Playgroud)
(我#$在名称中间添加了)
但是,当我尝试评估此电子邮件时,它花费了太多时间,并且浏览器挂起。
asefljkajsdfklasjdfklasjdfklasdfjklasdjfaklsdfjaklsdjfaklsfaksdjfkasdasdklfjaskldfjjdkfaklsdfjlak@company.com1
Run Code Online (Sandbox Code Playgroud)
(我最后补充com1)
我确定正则表达式是正确的,但不确定为什么要花这么多时间来评估第二个示例。如果我提供较短的电子邮件,它将很快得到评估。请参阅以下示例
dfjjdkfaklsdfjlak@company.com1
Run Code Online (Sandbox Code Playgroud)
请帮助我解决性能问题
你的正则表达式遇到了灾难性的回溯。由于[\.-]?in([\.-]?\w+)*是可选的,它使得群退化为(\w+)*,这是灾难性回溯的典型案例。
删除即可?解决问题。
我还删除了内部字符类的多余转义.,并稍微更改了正则表达式。
^\w+([.-]\w+)*@\w+([.-]\w+)*\.\w{2,3}$
Run Code Online (Sandbox Code Playgroud)
请注意,许多新通用 TLD 的字符数超过 3 个。甚至一些扩展前的 gTLD 也超过 3 个字符,例如.info.
事实上,正则表达式也不支持国际化域名。
| 归档时间: |
|
| 查看次数: |
482 次 |
| 最近记录: |