AngularJS中的正则表达式,UI冻结

时间:2017-02-08 07:31:04

标签: regex

我正在使用以下正则表达式验证电子邮件。键入时UI会冻结。提前感谢

'^(?!.*([.+_-])\\1)((?:[a-zA-Z0-9]+[a-zA-Z0-9.+_-]*)*[a-zA-Z0-9])+@((?:[a-zA-Z0-9]+[a-zA-Z0-9-]*)*[a-zA-Z0-9])(?:\\.(?:[a-zA-Z][a-zA-Z0-9]*){2,63})+$'

1 个答案:

答案 0 :(得分:0)

这是一个由量化模式组成的灾难性回溯案例,其中第一个是强制性的,第二个是可选的。

基本上,您可以替换

((?:[a-zA-Z0-9]+[a-zA-Z0-9.+_-]*)*[a-zA-Z0-9])+

[a-zA-Z0-9][a-zA-Z0-9.+_-]*[a-zA-Z0-9]

并且您的模式将停止冻结代码执行。但是,尾随部分(?:\\.(?:[a-zA-Z][a-zA-Z0-9]*){2,63})+看起来也很奇怪。您可以将其缩减为(?:\\.[a-zA-Z][a-zA-Z0-9]*)+,因为{2,63}限制在这里没有意义。

使用

'^(?!.*([.+_-])\\1)[a-zA-Z0-9][a-zA-Z0-9.+_-]*[a-zA-Z0-9]@[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9](?:\\.[a-zA-Z][a-zA-Z0-9]*)+$'