【问题标题】:Password Regex (client side javascript)密码正则表达式(客户端 javascript)
【发布时间】:2011-09-10 00:58:00
【问题描述】:

我需要一个符合以下条件的正则表达式:

至少 7 个字母数字字符和 1 个特殊字符

我用过这个:

^.*(?=.{7,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$!%^&+=]).*$

如果我输入 Password1,它就可以正常工作!但不适用于 PASSWORD1!。

不适用于:Stmaryshsp1tal!

我正在使用我指定正则表达式的 Jquery 验证插件。

当我使用正则表达式验证器并指定以下正则表达式时:

^.*(?=.{7,})(?=(.*\W){1,}).*$

它完美运行,没有任何问题。当我在 Jquery 验证中设置此正则表达式时,我正在使用它不起作用。

请有人对此有所了解吗?我想了解为什么我的第一个正则表达式不起作用。

【问题讨论】:

  • £、... 和 π 对你来说还不够好?
  • FWIW,有时运行多个正则表达式测试而不是一个非常复杂的测试是有意义的。
  • 您想要 1 个特殊字符吗?或者至少 1 个?
  • 你说它对PASSWORD1! 不起作用是什么意思?它明确要求至少一个小写字母,所以如果它不匹配,那么它确实工作。

标签: c# javascript jquery regex


【解决方案1】:
(?=.\d)(?=.[a-z])

尝试在同一位置匹配一个数字和一个字母数字字符。请记住,(?= ... ) 不会提供任何内容。

你想要的大概是:

^(?=.*\W)(?=(.*\w){7})

这与确认您的字符串同时匹配^.*\W(至少一个特殊字符)和^(.*\w){7})(7 个字母数字字符)完全相同。请注意,如果有更多,它也会匹配。

【讨论】:

  • 嗨,Benoit,感谢您的回复,但这对我不起作用。我试过: regex:"^.*(?=.*\W)(?=(.*\w){7}).*$" 但它似乎与我期望的密码不匹配,例如 Password1 !
  • 如果您使用 regex_match 而不是 regex_search,请在模式末尾添加 .*(并删除 ^
  • 这是我使用的方法: $.validator.addMethod("regex", function(value, element, regexp) { if (regexp.constructor != RegExp) regexp = new RegExp(regexp); else if (regexp.global) regexp.lastIndex = 0; return this.optional(element) || regexp.test(value); }, "Input does not match complex requirements" );
【解决方案2】:

试试这个正则表达式:

\S*[@#$!%^&+=]+\S*(?<=\S{7,})

EDIT3:好的,这是最后一次编辑;)。

这也将匹配其他特殊字符。因此,如果您不想限制有效字符的数量,请将 \S 更改为所有有效字符的范围。

【讨论】:

    【解决方案3】:

    这是正则表达式,我认为它可以处理所有可能的组合..

    ^(?=.{7,})\w*[.@#$!%^&+=]+(\w*[.@#$!%^&+=]*)*$
    

    这里是这个正则表达式的链接,http://regexr.com?2tuh5

    【讨论】:

      【解决方案4】:

      作为快速测试正则表达式的好工具,我建议http://regexpal.com/(无关系;))。有时简化你的表达会有很大帮助。

      那你可能想试试^[a-zA-Z0-9@#$!%^&amp;+=]{7,}$

      更新 2 现在包括数字

      ^.*(?=.{7,})(?=.*\d)(?=.*[a-zA-Z])(?=.*[@#$%^&amp;+=!]).*$

      这匹配:

      • Stmarysh3sptal!, password1!, PASSWORD1P!!!!!!@#^^ASSWORD1, 122ss121a212!!

      ...但不是:

      • 密码1,密码1密码1,密码!,密码!,1221121212!等等

      【讨论】:

      • 嗨,Brian,这个正则表达式匹配“密码”之类的密码,我需要他们使用至少 1 个特殊字符
      • 我刚刚看到你想要至少一个特殊字符。好吧,我猜以上内容不适合您的需求...
      • 编辑了第二次尝试,看起来它有效(至少当我尝试它时 ;-))
      • 嗨,布莱恩,太好了!好的,我知道我稍微移动了目标位置,但我们可以对其进行修改,以便我们将至少 1 位数字作为标准的一部分吗?
      • 好的,所以我去掉了那个问号。应该有效,不是吗?
      【解决方案5】:

      匹配Password1!但不匹配PASSWORD1!的原因是这个子句:

      (?=.*[a-z])
      

      密码中至少需要一个小写字母。该模式表示密码长度必须至少为 7 个字符,并且包含大小写字母、至少一个数字和至少一个 @#$!%^&amp;+=PASSWORD1! 失败,因为其中没有小写字母。

      第二种模式接受PASSWORD1!,因为它的密码要求要弱得多。它所要求的只是密码为 7+ 个字符,并且其中至少包含一个特殊字符(_ 除外)。顺便说一句,{1,} 是不必要的。

      如果我是你,我会避免削弱密码并保持原样。如果出于某种原因我想允许全小写或全大写密码,我只需将其更改为

      ^(?=.*\d)(?=.*[a-zA-Z])(?=.*[@#$!%^&+=]).{7,}$
      

      ...因此不会比我必须的那样削弱密码要求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-10
        • 1970-01-01
        相关资源
        最近更新 更多