7

Chcę potwierdzić hasło wprowadzone przez użytkownika do następujących kryteriów:Jak dodać sprawdzanie hasła za pomocą wyrażenia regularnego w angularjs według określonego kryterium?

Hasło powinno składać się z co najmniej 8 znaków i powinno zawierać jedną liczbę, jeden znak i jeden znak specjalny.

Dla niego użyłem następującego wyrażenia regularnego:

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

Próbowałem to wyrażenie w moim kodzie angularjs jak poniżej:

<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> 

W moim powyższym kodzie zostanie wyświetlony komunikat o błędzie, gdy pole hasło jest puste i ostrość jest tracona. Jeśli użytkownik wprowadzi hasło, które nie spełnia kryteriów, o których wspomniałem, komunikat o błędzie nie pojawi się.

Jak naprawić ten problem? Niech ktoś mi pomoże.

+0

Można tworzyć niestandardowe dyrektywy i może obserwować podobną apporach ... http://stackoverflow.com/questions/36351760/directive-not-called-on-input-change/36352048#36352048 –

+0

@AnkitPundhir: Właściwie ja chcesz, aby regex był używany w ng-patternie, to jest to. – user2839497

Odpowiedz

2

Zaledwie kilka zauważa

1) Powyższy zawiera jeden zbędny $. Powinno być ng-pattern="/^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\[email protected]$!%*#?&]{8,}$/"

2) Nie usuwać wiodącym ^ i końcowe $ ponieważ zapobiega przedostawaniu spacji

3) Jeśli chcesz określić wzór w kontrolerze następnie

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

ale nigdy

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

jako wzór jest obiektem RegExp, a nie ciągiem.

Mam nadzieję, że to pomoże Ci zaoszczędzić trochę czasu.