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