it-swarm.com.ru

Почему 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>

Вот это Fiddle http://jsfiddle.net/wkzab/1/

16
Will

ОБНОВЛЕНИЕ

Я немного разбирался в этом (на самом деле никогда не использовал 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 будет принимать любое значение, если вся строка является буквенно-цифровой. Обновите вопрос, если вам нужна помощь с другим шаблоном.

19
Sam

Я тоже столкнулся с той же проблемой. Нашел обходной путь для этого.

Вы должны сделать что-то подобное в вашем контроллере.

$scope.myRegex = /[a-zA-Z]{4}[0-9]{6,6}[a-zA-Z0-9]{3}/; (не помещайте выражения в кавычки)

В заключение

<input ng-model="widget.title" required ng-pattern="myRegex">

Теперь будет работать.

41
Ved

Да, в самом деле! Это вызывало у меня проблему с ... пропуском цитат - вот что исправило это для меня.

 $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})/;
0
EltonFlow