Angularjs 角模式浏览器
我们有一个用于电子邮件的正则表达式。我们的应用程序正在继承正则表达式,因此可能无法切换它。。。无论如何,相同的步骤似乎会使浏览器中的javascript崩溃。我已经能够在IE和Chrome中复制,但不能在Firefox中复制。代码如下:Angularjs 角模式浏览器,angularjs,Angularjs,我们有一个用于电子邮件的正则表达式。我们的应用程序正在继承正则表达式,因此可能无法切换它。。。无论如何,相同的步骤似乎会使浏览器中的javascript崩溃。我已经能够在IE和Chrome中复制,但不能在Firefox中复制。代码如下: var mod = angular.module("myApp", []); mod.controller("MainCtrl", function ($scope) { //Pattern that blows up the browser duri
var mod = angular.module("myApp", []);
mod.controller("MainCtrl", function ($scope) {
//Pattern that blows up the browser during ng-pattern
$scope.emailPattern = /^(?!.*\.{2})([a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+([\.][a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+)*)@((([\-]?[a-zA-Z0-9]){2,}[\.])*(([a-zA-Z0-9][\-]?){1,})+).(([\.]([a-zA-Z0-9][\-]?){2,}([a-zA-Z0-9])*)+)$/;
});
HTML:
{{user.email}
。以下是导致浏览器崩溃的基本步骤:
这将使IE和Chrome一致崩溃。以前有人遇到过这个错误吗?任何已知的解决方法?我认为问题在于正则表达式本身 如果使用原始表达式访问任何regex验证器站点(如),同样的问题也会出现(浏览器冻结)
更改:
$scope.emailPattern = /^(?!.*\.{2})([a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+([\.][a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+)*)@((([\-]?[a-zA-Z0-9]){2,}[\.])*(([a-zA-Z0-9][\-]?){1,})+).(([\.]([a-zA-Z0-9][\-]?){2,}([a-zA-Z0-9])*)+)$/;
致:
我能够复制。嘿,我注意到ng模式的文档上写着:'*@param{string=}ngPattern set
pattern
validation error key,如果值与*RegExp模式表达式不匹配。对于内联模式,预期值为/regexp/
;对于定义为范围表达式的*模式,预期值为regexp
。可能您的问题在于使用范围表达式和内联模式。当我将其用作范围表达式或内联表达式时,会出现崩溃。使正则表达式变得“更简单”不会使浏览器崩溃,但按原样验证正则表达式应该没有什么错。对导致过度回溯的那个不必要的量词有很好的了解。@Zach你救了我一天!
$scope.emailPattern = /^(?!.*\.{2})([a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+([\.][a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+)*)@((([\-]?[a-zA-Z0-9]){2,}[\.])*(([a-zA-Z0-9][\-]?){1,})+).(([\.]([a-zA-Z0-9][\-]?){2,}([a-zA-Z0-9])*)+)$/;
$scope.emailPattern = /^(?!.*\.{2})([a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+([\.][a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+)*)@((([\-]?[a-zA-Z0-9]){2,}[\.])*(([a-zA-Z0-9][\-]?))+).(([\.]([a-zA-Z0-9][\-]?){2,}([a-zA-Z0-9])*)+)$/;