正则表达式根据给定的条件检查密码验证?

时间:2015-02-26 22:44:38

标签: javascript regex validation passwords

确保给定字符串与以下内容匹配的正则表达式是什么? 条件?

  1. 最少八个字符的长度。

  2. 应该是以下三项的组合:

        a. Upper case characters 
        b. Lower Case characters 
        c. Numbers 
        d. Special characters `(!@#$%^&*?/)`
    
  3. 我知道一个正则表达式可以帮助我检查字符串是否匹配#2下提到的所有点。但我想知道我们如何检查组合?

    正在使用的正则表达式:

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

    先谢谢

3 个答案:

答案 0 :(得分:3)

您希望在前瞻中使用.*代替.

例如:(?=.*[a-z])而不是(?=.[a-z])

<强>解释

.只匹配任何字符的一个,所以目前,您的前瞻只检查第二个字符是否匹配[a-z][A-Z]\d[_|[!@#$%^&*?/]


  

但是不要这样做,因为即使你正确实施它,这也是一个可怕的密码策略。

这些密码策略适用于那些不太了解如何创建强密码的人。密码破解者不会以任何方式将大写字母或$视为“特殊”。执行此类操作只会使人们更难记住密码。您可以更好地教育您的用户如何创建强密码。

最好的密码是长密码。喜欢16个字符或更多。更长时间甚至更好。

实现这一点也非常简单。不需要正则表达式!

if (password.length < 16) { /* too short! */ }

“经过20年的努力,我们已成功培训每个人使用难以记住的密码,但计算机很容易猜到。”

如果你不相信,也许这部着名的漫画会有所帮助

Password Strength

(信用:http://xkcd.com/936/

答案 1 :(得分:0)

你几乎就在那里,只是在正则表达式中不匹配.(任何字符):

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

\w[a-zA-Z0-9_]

相同

答案 2 :(得分:0)

不幸的是,您使用的是不支持正则表达式条件的JavaScript。

在一个正则表达式中,只有两种方法可以完成 1.对Y 的 X进行所有排列 2.使用支持条件的引擎。

由于JavaScript无法解决问题,因此只剩下1.左 当它超过订单3时我感到困惑。

如果发动机支持条件,就可以这样做 但它没有,所以忽略这一点。

作为参考,如果你可以使用条件,那么任何X的Y都很容易完成 检查捕获组的输出匹配位置,并注意如何 他们出了故障。

示例:

 #  ^(?:.*?(?:((?(1)(?!))[a-z]+)|((?(2)(?!))[A-Z]+)|((?(3)(?!))[0-9]+)|((?(4)(?!))[_!@#$%^&*?/]+))){3,4}.*$

 ^     
 (?:
      .*? 
      (?:
           (                        # (1)
                (?(1)
                     (?!)
                )
                [a-z]+ 
           )
        |  (                        # (2)
                (?(2)
                     (?!)
                )
                [A-Z]+ 
           )
        |  (                        # (3)
                (?(3)
                     (?!)
                )
                [0-9]+ 
           )
        |  (                        # (4)
                (?(4)
                     (?!)
                )
                [_!@#$%^&*?/]+ 
           )
      )
 ){3,4}
 .* 
 $

输出:

 **  Grp 0 -  ( pos 0 , len 15 ) 
B,B_+&*%#a0AaaP
 **  Grp 1 -  ( pos 9 , len 1 ) 
a
 **  Grp 2 -  ( pos 0 , len 1 ) 
B
 **  Grp 3 -  ( pos 10 , len 1 ) 
0
 **  Grp 4 -  ( pos 3 , len 1 ) 
_