由于某种原因,初始值不会出现在字段中,但没有ng-pattern的第二个字段确实有效。任何想法?
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>
答案 0 :(得分:42)
我也遇到了同样的问题。找到了解决方法来执行此操作。
你必须在你的控制器中做这样的事情。
$scope.myRegex = /[a-zA-Z]{4}[0-9]{6,6}[a-zA-Z0-9]{3}/;
(不要将表达式放在引号中)
最后
<input ng-model="widget.title" required ng-pattern="myRegex">
它现在正在运作。
答案 1 :(得分:19)
<强>更新强>
我稍微调查了一下(从未真正使用过Angular),并且通过在表单和输入上使用name
属性,您可以获取我最新JSFiddle中显示的错误。它的格式为:{{formName.inputName.$error}}
。这将返回一个参数等于布尔值的对象。因此,当正则表达式出错时,{{form.title.$error.pattern}}
将为true
(因此您将显示错误)。我还清理(使用相同的)你的正则表达式:/^[A-Z]{4}\d{6}[A-Z\d]{3}$/i
。
<强> OLD 强>
ng-pattern
属性会尝试根据此正则表达式匹配字段:/[a-zA-Z]{4}[0-9]{6,6}[a-zA-Z0-9]{3}/
。这转换为4个字母字符,6个数字和3个字母数字字符。一旦你有匹配的模式,它就会出现。
您应该能够删除ng-pattern
属性或将表达式更改为不太具体。例如,只要整个字符串是字母数字,此JSFiddle将接受任何值。如果您需要不同模式的帮助,请更新问题。
答案 2 :(得分:0)
$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})/;