Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么Angularjs ng模式不能与以下regexp一起工作?_Javascript_Angularjs_Regex_Angularjs Scope_Angularjs Model - Fatal编程技术网

Javascript 为什么Angularjs ng模式不能与以下regexp一起工作?

Javascript 为什么Angularjs ng模式不能与以下regexp一起工作?,javascript,angularjs,regex,angularjs-scope,angularjs-model,Javascript,Angularjs,Regex,Angularjs Scope,Angularjs Model,由于某些原因,初始化值没有出现在字段中,但是没有ng模式的第二个字段可以工作。有什么想法吗 angular.module('app', []).controller('MainCtrl', function($scope) { $scope.widget = {title: 'abc', title2: 'abc'}; }); <div ng-app="app" ng-controller="MainCtrl"> <input n

由于某些原因,初始化值没有出现在字段中,但是没有ng模式的第二个字段可以工作。有什么想法吗

    angular.module('app', []).controller('MainCtrl', function($scope) {
      $scope.widget = {title: 'abc', title2: 'abc'};
    });

    <div ng-app="app" ng-controller="MainCtrl">
     <input ng-model="widget.title" required ng-pattern="/[a-zA-Z]{4}[0-9]{6,6}[a-zA-Z0-9]{3}/">
     <br /><br />   
     input 1: {{ widget.title }}
     <br /><br />   
     <input ng-model="widget.title2" required>
     <br /><br />   
     input 2: {{ widget.title2 }}
    </div>
angular.module('app',[]).controller('MainCtrl',function($scope){
$scope.widget={title:'abc',title2:'abc'};
});


输入1:{{widget.title}



输入2:{{widget.title2}
这是小提琴

更新

我仔细研究了一下(从未真正使用过Angular),通过在表单和输入上使用
name
属性,您可以获取一个错误,如我的最新版本中所示。其格式为:
{{formName.inputName.$error}}
。这将返回参数等于布尔值的对象。因此,当正则表达式出现错误时,
{{form.title.$error.pattern}
将为
true
(因此您将显示错误)。我还将您的正则表达式清理到:
/^[A-Z]{4}\d{6}[A-Z\d]{3}$/I


旧的

ng模式
属性尝试基于以下正则表达式匹配字段:。这将转换为4个字母字符、6个数字和3个字母数字字符。一旦你有了一个匹配的模式,它就会出现


您应该能够删除
ng pattern
属性,或者将表达式更改为不太具体。例如,只要整个字符串是字母数字,它就可以接受任何值。如果需要其他模式的帮助,请更新问题。

我也面临同样的问题。找到了一个解决方法来执行此操作

您必须在控制器中执行类似的操作

$scope.myRegex=/[a-zA-Z]{4}[0-9]{6,6}[a-zA-Z0-9]{3}/(不要将表达式放在引号中)

最后


它现在可以工作了。

是的!这给我带来了一个问题…不使用引号是我解决问题的方法

 $scope.regVal= /([A-Z]{3}\s?(\d{3}|\d{2}|d{1})\s?[A-Z])|([A-Z]\s?(\d{3}|\d{2}|\d{1})\s?[A-Z]{3})|(([A-HK-PRSVWY][A-HJ-PR-Y])\s?([0][2-9]|[1-9][0-9])\s?[A-HJ-PR-Z]{3})/;

第一个输入似乎在与正则表达式匹配之前不会显示,例如,请尝试:
abcZ123456ABC
。我希望以ABCD123456X3ZThanks@Sam的形式验证字符串,但您知道为什么吗?我的意思是,这背后的逻辑是什么?很好的答案,问题是我正在寻找验证模式(ABCD123456X3Z),这是墨西哥税务id号,我希望能够显示一条错误消息,如:您输入的字符串ABCDEF无效。其中“ABCDEF”是用户输入。感谢您的时间和努力@Sam your rock!但当字段的值与模式不匹配时,我仍然无法访问该字段的值。也许这就是angular的工作方式?我应该接受这个吗?这两种奇怪的行为是:1。页面加载时,第一个字段不包含在控制器上设置的初始值。2.我一开始输入,“widget”对象中的“title”属性就会消失。(我知道,当它与de模式匹配时,它会再次出现)不太确定这是否是一种预期的角度行为,或者是否有办法绕过它。但我认为这是有意的。假设您有一个属性为
zip
且必须匹配
[0-9]{5}
的模型,您可以使用此zip查询餐厅数据库。如果默认值(或某人输入的值)是“abc”,那么
zip
应该等于“abc”还是
null
?我认为
null
因此它没有在其他地方使用(即错误地查询数据库)。我仍然认为这很奇怪。即使该值不正确,用户也应该能够访问该值,这样您就可以告诉用户。。“值”不是有效值。不管怎样,我会认为你的答案是正确的,因为它指出了所有这些问题。我同意这有点奇怪。即使没有明确说明它是这样工作的,或者如何解决它,但是在他们的示例中,如果您将姓氏替换为太短的名称,您可以看到这是正常的行为。啊!只是花了一个小时想弄明白为什么这个模式不起作用。我把它直接放在属性
模式
中,然后
ng模式
他们真的需要更好地记录它。谢谢@ved,如果我从那里的服务器获取作为字符串的正则表达式,我的意思是,我有$scope.myRegex=“/[a-zA-Z]{4}[0-9]{6,6}[a-zA-Z0-9]{3}/”;有什么办法吗?@Vivek举个例子,如果你把正则表达式作为字符串,我的意思是在“”中,那么现在你如何编写一个正则表达式来匹配引号。有关详细信息,请访问:。只是一个旁注,在我的控制器中,我已将正则表达式用引号括起来,它仍然有效。感谢您提到不要将其用引号括起来-这是我的问题