Почему Angularjs ng-pattern не работает со следующим регулярным выражением?
По какой-то причине инициализированное значение не появляется в поле, но второе поле без 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>
Вот скрипка http://jsfiddle.net/wkzab/1/
3 ответа
ОБНОВИТЬ
Я немного посмотрел на него (никогда не использовал 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 будет принимать любое значение, если вся строка является буквенно-цифровой. Обновите вопрос, если вам нужна помощь с другим шаблоном.
Я тоже столкнулся с той же проблемой. Нашел обходной путь для этого.
Вы должны сделать что-то подобное в вашем контроллере.
$scope.myRegex = /[a-zA-Z]{4}[0-9]{6,6}[a-zA-Z0-9]{3}/;
(не помещайте выражение в кавычки)
в заключение
<input ng-model="widget.title" required ng-pattern="myRegex">
Теперь будет работать.
Да, в самом деле! Это вызывало у меня проблему с... пропуском цитат - это то, что исправило это для меня.
$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})/;