密码验证的正则表达式

33

有人能帮我创建一个用于密码验证的正则表达式吗?

条件是“密码必须包含8个字符,至少一个数字、一个字母和一个特殊字符,例如!#$%&?


1
密码规则很糟糕。请参阅参考 - 密码验证获取更多信息。 - ctwheels
7个回答

85
^.*(?=.{8,})(?=.*[a-zA-Z])(?=.*\d)(?=.*[!#$%&? "]).*$

---

^.*              : Start
(?=.{8,})        : Length
(?=.*[a-zA-Z])   : Letters
(?=.*\d)         : Digits
(?=.*[!#$%&? "]) : Special characters
.*$              : End

+1 通过几个示例测试,已在http://www.regular-expressions.info/javascriptexample.html上运行。 - amelvin
我尝试了使用'acf23!&7h',但无法通过验证。 - Andromeda
9
在匹配时不需要在开头和结尾加上 ".*"。这是毫无意义的,并且会导致运行时间显著变差(特别是在出现无效匹配的情况下)。 - Tom Lord
如何在正则表达式中设置“长度”限制? - lbrahim
如果您想包含基本上每个符号,使用 (?=.*\W|_) 是否更好? - Steve Hiner
使用@Tom Lord的建议,我修改了^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@#$%^&-+=()!? "]).{8,128}$,它匹配包含至少1个小写字母、1个大写字母、1个数字和其中一个特殊字符的密码,并且长度必须在8到128个字符之间。 - Jignesh Gohel

14

试一试

((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\W]).{6,20})

以上正则表达式的描述:

(           # Start of group
  (?=.*\d)      #   must contains one digit from 0-9
  (?=.*[a-z])       #   must contains one lowercase characters
  (?=.*[\W])        #   must contains at least one special character
              .     #     match anything with previous condition checking
                {8,20}  #        length at least 8 characters and maximum of 20 
)           # End of group

"/W" 可增加可用于密码的字符范围,使密码更安全。


1
为什么需要所有的(.)?如果你只是这样做似乎也可以:(?=\d)(?=[a-z])(?=[A-Z])(?=[\W]*).{6,20}。 - Nick George

7
您可以轻松地实现每个单独的要求(例如,最少8个字符:.{8,}将匹配8个或更多字符)。
要组合它们,您可以使用“正向前瞻”将多个子表达式应用于相同的内容。类似于(?=.*\d.*).{8,},以预查方式匹配一个(或多个)数字和8个或更多字符。
所以:
(?=.*\d.*)(?=.*[a-zA-Z].*)(?=.*[!#\$%&\?].*).{8,}
请记住转义元字符。

1
你的代码里有一些无意义的“.”。你可以使用以下代码:(?=.\d)(?=.[a-zA-Z])(?=.[!#$%&?]).{8,} - Tom Lord
@TomLord 我想测试一下...但你很有可能是正确的(原因:当然每个正向预查只需要确认每种字符类型的一个实例就可以了)。 - Richard
是的,我指出这一点的主要原因是,如果您的正则表达式不匹配,则在其中包含不必要的“.*”可能会使确定此问题变得非常低效! - Tom Lord

6

需要符合以下条件的密码:

  1. At least 1 digit
  2. At least 2 special characters
  3. At least 1 alphabetic character
  4. No blank space

    'use strict';
    (function() {
        var foo = '3g^g$';
    
        console.log(/^(?=.*\d)(?=(.*\W){2})(?=.*[a-zA-Z])(?!.*\s).{1,15}$/.test(foo));
    
        /**
         * (?=.*\d)         should contain at least 1 digit
         * (?=(.*\W){2})    should contain at least 2 special characters
         * (?=.*[a-zA-Z])   should contain at least 1 alphabetic character
         * (?!.*\s)         should not contain any blank space
         */
    })();
    

嗨@nasif-md-tanjim。您不允许密码包含空格,为什么?这是不好的吗?对于什么或哪里不好? - Kasir Barati
@mohammadjawadBarati,这只是我的个人偏好。 - Nasif Md. Tanjim

1

你可以为 javascript 验证编写自己的正则表达式;

        (/^
        (?=.*\d)                //should contain at least one digit
        (?=.*[a-z])             //should contain at least one lower case
        (?=.*[A-Z])             //should contain at least one upper case
        [a-zA-Z0-9]{8,}         //should contain at least 8 from the mentioned characters

        $/)

示例: /^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9]{7,}$/

这是一个正则表达式,用于验证密码的复杂性。它要求密码必须至少包含一个数字和一个字母,并且长度不能少于7个字符。


0
var regularExpression = new RegExp("^^(?=.*[A-Z]{"+minUpperCase+",})" +
    "(?=.*[a-z]{"+minLowerCase+",})(?=.*[0-9]{"+minNumerics+",})" +
    "(?=.*[!@#$\-_?.:{]{"+minSpecialChars+",})" +
    "[a-zA-Z0-9!@#$\-_?.:{]{"+minLength+","+maxLength+"}$");
if (pswd.match(regularExpression)) {
    //Success
}

0
您可以使用下面的模式。有关模式及其解释的更多信息,请参考下面的链接。
const pattern = /^(?=.*\d)(?=.*[~`!@#$%^&*()--+={}\[\]|\\:;"'<>,.?/_₹])(?=.*[a-z])(?=.*[A-Z]).{5,10}$/;

https://medium.com/p/19fc2b2a299c


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接