如何根据特定标准在angularjs中使用正则表达式添加密码验证?

新手上路,请多包涵

我想根据以下条件验证用户输入的密码:

密码长度至少应为8个字符,并应包含一个数字、一个字符和一个特殊字符。

为此,我使用了以下正则表达式:

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

我在我的 angularjs 代码中尝试了这个表达式,如下所示:

 <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)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{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>

在我上面的代码中,当密码字段为空并且焦点丢失时,将显示错误消息。如果用户输入的密码不符合我提到的标准,则不会显示错误消息。

我应该如何解决这个问题?有人请帮助我。

原文由 PHPFan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 430
2 个回答

据我了解你的问题。检查你的控制台它可能因词法错误而中断。

你忘记了 slash 在 ng-pattern 的开始和结束。请使用 ng-pattern="/^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$/"

我创建了一个可能对您有帮助的插件。 https://plnkr.co/edit/qCjp6a?p=preview

原文由 Ankit Pundhir 发布,翻译遵循 CC BY-SA 3.0 许可协议

我用 Angular 的内置模式验证器对此进行了尝试,并能够提出以下检查:

  • 长度至少为 8 个字符
  • 小写字母
  • 大写字母
  • 数字特殊字符

password: [ '', [ Validators.required, Validators.pattern('(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&].{8,}') ] ]

我要补充一点,我绝不是正则表达式专家。对于与 OP 密切相关的案例,这对我来说很简单。也许它会帮助别人。 Mozilla 的文档在解决这个问题上提供了很多帮助,特别是编写正则表达式模式部分。

原文由 Developer 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题