2017-02-18 12 views
0

マークアップ問題:正規表現

<form ng-submit="doRegister(registerForm);" novalidate name="registerForm"> 
    <input type="password" name="Password" ng-model="register.Password" 
     ng-pattern="/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/"/> 
    <span ng-show="registerForm.Password.$error.pattern" class="help-block"> 
     min 1 lower char, 1 upper char, 1 digit and one special char 
    </span> 

    <button type="submit" ng-disabled="registerForm.$invalid" > 
     Submit 
    </button> 
</form> 

私は私がテストしてい分1下CHARと1つの上部CHARと1桁と1つの特殊文字

とパスワード強度をテストしていこの文字列:[email protected] //失敗

私はこの文字列をテストしています: 12345aA! //合格

何か間違っていますか?

+0

は、意図的な最初のテストケースのために失敗しましたか?私はそれがあなたの条件に一致しない方法を参照してください。 –

+0

zxcvbn、パスワード強度のバリデーションがはるかに優れているか調べます。 – Geoff

+0

@Geoff:zxcvbnについて詳しく教えてください – Pankaj

答えて

2

@が最後の先読みであなたの文字クラスに含まれていないので、失敗しています。また、これにあなたの正規表現を簡素化することができます:

/^(?=.*[a-z])(?=.*[a-z])(?=.*[0-9])(?=.*[@!$#%]).{3,}$/ 

RegEx Demo

+1

'(?=。* [a-zA-Z])'は '(?=。* [az] )(?=。* [AZ]) '。 – sp00m

+0

あなたは正しいです、私はちょうど問題の「min 1 lower char、1 upper char' partに気付きました。 – anubhava