Почему 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})/;
Другие вопросы по тегам