7

Ich mag Passwort durch den Benutzer für folgende Kriterien eingegeben überprüfen:Wie kann die Passwort-Validierung mit regulärem Ausdruck in angularjs nach bestimmten Kriterien hinzugefügt werden?

Passwort sollte mindestens 8 Zeichen lang sein und soll eine Zahl, ein Zeichen und ein Sonderzeichen enthalten.

Denn es ich folgenden regulären Ausdruck:

^(?=.*[A-Za-z])(?=.*\d)(?=.*[[email protected]$!%*#?&])[A-Za-z\[email protected]$!%*#?&]{8,}$ 

Ich habe versucht, diesen Ausdruck in meinem AngularJS Code wie folgt:

<md-input-container class="md-block" style="margin-top:0px;"> 
      <label>Password</label> <md-icon 
       md-svg-src="/images/icons/ic_lock_black_24px.svg" class="name"></md-icon> 
      <input type="password" ng-model="newUser.userPassword" 
       name="userPassword" required 
       ng-pattern="^(?=.*[A-Za-z])(?=.*\d)(?=.*[[email protected]$!%*#?&])[A-Za-z\[email protected]$!%*#?&]{8,}$"> 
      <div 
       ng-messages="registerForm.userPassword.$error"> 
       <div ng-message="pattern">Password should be atleast 8 characters long 
        and should contain one number,one character and one special 
        character</div> 
       <div ng-message="required">Password should be atleast 8 characters 
        long and should contain one number,one character and one special 
        character</div> 
      </div> 
      </md-input-container> 

In meinem obigen Code die Fehlermeldung angezeigt, wenn das Passwort-Feld ist leer und der Fokus ist verloren. Wenn der Benutzer ein Passwort eingibt, das die genannten Kriterien nicht erfüllt, wird die Fehlermeldung nicht angezeigt.

Wie soll ich dieses Problem beheben? Jemand bitte hilf mir.

+0

können Sie benutzerdefinierte Richtlinie erstellen und ähnlichen apporach folgen ... http://stackoverflow.com/questions/36351760/directive-not-called-on-input-change/36352048#36352048 –

+0

@AnkitPundhir: Eigentlich I will, dass regex in ng-pattern verwendet wird, das ist es. – user2839497

Antwort

14

Soweit ich Ihr Problem verstanden habe. Überprüfe deine Konsole Es könnte bei lexikalischen Fehlern defekt sein.

Sie haben slash am Anfang und am Ende von ng-Muster vergessen. Bitte verwenden Sie ng-pattern="/^(?=.*[A-Za-z])(?=.*\d)(?=.*[[email protected]$!%*#?&])[A-Za-z\[email protected]$!%*#?&]{8,}$/"

Ich habe eine Plunk, die Ihnen helfen könnte erstellt. https://plnkr.co/edit/qCjp6a?p=preview

2

Nur ein paar Notizen

1) die oben enthält redundante $. Es sollte ng-pattern="/^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\[email protected]$!%*#?&]{8,}$/"

2) sein entfernen Sie nicht ^ Vorder- und Hinter $ wie es das Eindringen von weißen Flächen

3) verhindert Wenn Sie das Muster in der Steuerung dann

$scope.passwordStrength = /^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\[email protected]$!%*#?&]{8,}$/; und <input ng-pattern="passwordStrength"> definieren wollen

aber nie

$scope.passwordStrength = "/^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\[email protected]$!%*#?&]{8,}$/";

als das Muster ist ein RegExp Objekt, keine Zeichenfolge.

Hoffe, das wird Ihnen helfen, Zeit zu sparen.

Verwandte Themen