【问题标题】:Angular RegEx pattern for password validation用于密码验证的 Angular RegEx 模式
【发布时间】:2020-05-17 16:44:15
【问题描述】:

要求:

在我的 Angular 应用程序中,用户密码应符合以下要求,

  • 最少八个字符
  • 至少一个大写字母
  • 至少一个小写字母
  • 至少一个数字
  • 至少一个特殊字符

问题:

对于上述要求,我使用下面的正则表达式。

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

我的代码如下, 问题是如果密码以数字开头,则此返回无效。

例如:1F4@sf5s6,18F4@sf5s6

问题:

Q1:这个正则表达式不符合我的要求吗?

Q2:如何解决这个问题?

Q3:有没有其他方法可以实现这个要求?

【问题讨论】:

    标签: angular angular2-forms


    【解决方案1】:

    Q1:这个正则表达式不符合我的要求吗? Q2:如何解决这个问题?

    不,它不符合您的要求,但您的 SOO 关闭。在你的点后面加上几个星号,你就是金色的。这是正确的正则表达式 (https://regex101.com/r/grOsJC/1):

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

    您遇到的问题是您的积极前瞻只是断言 second 字符,而不是检查整个字符串。此外,您的示例密码中有一个逗号,这不是正则表达式中的合法字符,因此它永远不会匹配。

    Q3:有没有其他方法来实现这个要求?

    您可以将正则表达式拆分为多个步骤或传递同一字符串,而不是将其全部塞入一个表达式中。但我认为你所拥有的正则表达式是可以理解的。

    【讨论】:

    • 我已经尝试过您已更正的正则表达式,但它没有用。在 javascript RegEx 中按预期工作,但在角度形式中它不起作用。另外,我在复制正则表达式时犯了一个错误。正确的是,^(?=.*[az])(?=.*[AZ])(?=.*[0-9])(?=.*[$@$!%*?&]) [A-Za-z\d$@$!%*?&].{8,}$ 我认为 * 已被 StackOverflow 编辑器删除
    • 也许你可以尝试将你的正则表达式括在 /.../ 而不是单引号 '..'
    • 你的正则表达式解决了我的问题,将它与/.../ 一起使用。在我关注这个例子之前ihateregex.io/expr/password,但我在验证时遇到了一些奇怪的问题,可能是由正则表达式上的g 标志引起的(github.com/angular/angular/issues/14028#issuecomment-487524943
    【解决方案2】:

    试试这个,我试过了,效果很好。

    ^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$
    

    您可以在此站点中对其进行测试: https://regex101.com/r/DCRR65/4/tests

    【讨论】:

      【解决方案3】:

      我试过了,效果很好

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

      密码长度应在 8 - 15 个字符之间,应包含一个数字、一个大小写字符和一个特殊字符

      【讨论】:

        猜你喜欢
        • 2014-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-29
        • 1970-01-01
        • 2018-03-03
        • 2012-12-08
        相关资源
        最近更新 更多