最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - validation of password using ng-pattern - Stack Overflow

programmeradmin3浏览0评论

I want to validate password using ng-pattern. I use the same regular expression in my model and it works. I want to display error message if password is not valid (at least 7 characters, one of them must be number).

I've added regular expression to ng-pattern, but it only shows error message, if password is shorter than 7 characters (because I use ng-minlength), and it doesn't show, if password is also in bad format. Can someone help me to figure out why it happens?

Model:

    [RegularExpression(@"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{7,}$", ErrorMessage = "Máte příliš krátké heslo (minimum je 7 znaků), popř. vaše heslo není ve správném tvaru.")]
    [Required(ErrorMessage = "Zadejte prosím Vaše heslo.", AllowEmptyStrings = false)]
    public string Password { get; set; }

Registration.cshtml:

    <input type="password" style="width: 600px" class="form-control" name="Password" id="Password" ng-pattern="^(?=.*[a-z])(? =.*[A-Z])(? =.*\d)[a-zA-Z\d]{7,}$" ng-model="User.Password" ng-minlength="7" ng-class="submitted?'ng-dirty':''" required />
                    <span class="error" ng-show=" (form.Password.$dirty || submitted) && form.Password.$error.required">Zadejte prosím Vaše heslo.</span>
                    <span class="error" ng-show=" (form.Password.$dirty || submitted) && (form.Password.$error.minlength || form.Password.$error.pattern)">Máte příliš krátké heslo (minimum je 7 znaků), popř. vaše heslo není ve správném tvaru.</span>
                    <span class="success" ng-show=" (form.Password.$dirty || submitted) && form.Password.$valid">Vaše heslo má dostatečnou délku a je ve správném tvaru.</span>

I want to validate password using ng-pattern. I use the same regular expression in my model and it works. I want to display error message if password is not valid (at least 7 characters, one of them must be number).

I've added regular expression to ng-pattern, but it only shows error message, if password is shorter than 7 characters (because I use ng-minlength), and it doesn't show, if password is also in bad format. Can someone help me to figure out why it happens?

Model:

    [RegularExpression(@"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{7,}$", ErrorMessage = "Máte příliš krátké heslo (minimum je 7 znaků), popř. vaše heslo není ve správném tvaru.")]
    [Required(ErrorMessage = "Zadejte prosím Vaše heslo.", AllowEmptyStrings = false)]
    public string Password { get; set; }

Registration.cshtml:

    <input type="password" style="width: 600px" class="form-control" name="Password" id="Password" ng-pattern="^(?=.*[a-z])(? =.*[A-Z])(? =.*\d)[a-zA-Z\d]{7,}$" ng-model="User.Password" ng-minlength="7" ng-class="submitted?'ng-dirty':''" required />
                    <span class="error" ng-show=" (form.Password.$dirty || submitted) && form.Password.$error.required">Zadejte prosím Vaše heslo.</span>
                    <span class="error" ng-show=" (form.Password.$dirty || submitted) && (form.Password.$error.minlength || form.Password.$error.pattern)">Máte příliš krátké heslo (minimum je 7 znaků), popř. vaše heslo není ve správném tvaru.</span>
                    <span class="success" ng-show=" (form.Password.$dirty || submitted) && form.Password.$valid">Vaše heslo má dostatečnou délku a je ve správném tvaru.</span>
Share Improve this question edited Dec 1, 2016 at 15:51 Mistalis 18.3k14 gold badges77 silver badges97 bronze badges asked Dec 1, 2016 at 15:48 mates.lukas94mates.lukas94 451 silver badge6 bronze badges 1
  • They're not quite the same though, are they? You have a space between ? and = in a couple places in the ng-pattern.... – Heretic Monkey Commented Dec 1, 2016 at 16:01
Add a ment  | 

2 Answers 2

Reset to default 6

You will have to use / before and after your regex, and as pointed out by @MikeMcCaughan, remove any spaces in the positive lookahead. For example, change (? = to (?=

ng-pattern="/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{7,}$/"

Change pattern to /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{7,}$/

<input type="password" style="width: 600px" class="form-control" name="Password" id="Password" ng-pattern="/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{7,}$/" ng-model="User.Password" ng-minlength="7" ng-class="submitted?'ng-dirty':''" required />
                <br/>
                <span class="error" ng-show=" (form.Password.$dirty || submitted) && form.Password.$error.required">Required</span>
                <span class="error" ng-show=" (form.Password.$dirty || submitted) && form.Password.$error.minlength">Mini 7 characters</span>
                <span class="success" ng-show=" (form.Password.$dirty || submitted) && form.Password.$error.pattern">Invalid</span>

Have a look at demo link https://plnkr.co/edit/Xo1qfEHS2NrdUHyHDjml?p=preview

发布评论

评论列表(0)

  1. 暂无评论