wake-up-neo.com

Warum arbeitet Angularjs ng-pattern nicht mit dem folgenden Regexp?

Aus irgendeinem Grund erscheint der initialisierte Wert nicht im Feld, aber das zweite Feld ohne das ng-Muster funktioniert. irgendwelche Ideen?

    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>

Hier ist die Fiddle http://jsfiddle.net/wkzab/1/

16
Will

UPDATE

Ich habe ein bisschen nachgesehen (nie wirklich Angular verwendet), und durch Verwendung des name-Attributs für das Formular und die Eingaben können Sie einen Fehler wie in meinem neuesten JSFiddle anzeigen. Sein im Format: {{formName.inputName.$error}}. Dies gibt ein Objekt mit Parametern zurück, die einem booleschen Wert entsprechen. {{form.title.$error.pattern}} wird also true sein, wenn ein Fehler mit dem regulären Ausdruck vorliegt (Sie würden also den Fehler anzeigen). Ich habe auch Ihre Regex auf Folgendes geändert: /^[A-Z]{4}\d{6}[A-Z\d]{3}$/i.


ALT

Das ng-pattern-Attribut versucht, das Feld basierend auf diesem regulären Ausdruck abzugleichen: /[a-zA-Z]{4}[0-9]{6,6}[a-zA-Z0-9]{3}/ . Dies übersetzt in 4 alphabetische Zeichen, 6 Ziffern und 3 alphanumerische Zeichen. Sobald Sie ein übereinstimmendes Muster haben, wird es angezeigt.

Sie sollten in der Lage sein, das ng-pattern-Attribut zu entfernen oder den Ausdruck zu ändern, um weniger spezifisch zu sein. Zum Beispiel akzeptiert dieses JSFiddle jeden Wert, solange die gesamte Zeichenfolge alphanumerisch ist. Aktualisieren Sie die Frage, wenn Sie Hilfe zu einem anderen Muster benötigen.

19
Sam

Auch ich stand vor demselben Problem. Es wurde eine Problemumgehung gefunden.

Sie müssen so etwas in Ihrem Controller tun.

$scope.myRegex = /[a-zA-Z]{4}[0-9]{6,6}[a-zA-Z0-9]{3}/; (nicht in Anführungszeichen setzen)

Endlich

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

Es wird jetzt funktionieren.

41
Ved

Ja in der Tat! Das hat mich zu einem Problem veranlasst, ... die Zitate wegzulassen, hat es für mich behoben.

 $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