Почему 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})/;