关于javascript:regex密码必须包含至少八个字符,至少一个数字,同时包含小写和大写字母以及特殊字符

Regex for password must contain at least eight characters, at least one number and both lower and uppercase letters and special characters

我想要一个正则表达式来检查:

密码至少包含八个字符,包括至少一个数字,并且包括小写和大写字母以及特殊字符,例如#?!

它不能是您的旧密码,也不能包含您的用户名、"password""websitename"

这里是我的验证表达式,它适用于八个字符,包括一个大写字母、一个小写字母和一个数字或特殊字符。

1
2
(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.
])(?=.*[A-Z])(?=.*[a-z]).*$"

如何为密码编写密码必须是八个字符,包括一个大写字母、一个特殊字符和字母数字字符?


至少八个字符,至少一个字母和一个数字:

1
"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$"

至少八个字符,至少一个字母、一个数字和一个特殊字符:

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

最少八个字符,至少一个大写字母、一个小写字母和一个数字:

1
"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"

最少八个字符,至少一个大写字母、一个小写字母、一个数字和一个特殊字符:

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

最少8个字符,最多10个字符,至少一个大写字母、一个小写字母、一个数字和一个特殊字符:

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


您可以将此regex与多个lookahead断言(条件)一起使用:

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

此regex将强制执行以下规则:

  • 至少一个大写英文字母,(?=.*?[A-Z])
  • 至少一个小写英文字母,(?=.*?[A-Z])
  • 至少一个数字,(?=.*?[0-9])
  • 至少一个特殊字符,(?=.*?[#?!@$%^&*-])
  • 长度至少为8英寸的.{8,}(带锚)


正则表达式没有and运算符,因此很难编写一个与有效密码匹配的regex,当有效性由某物和其他某物以及其他某物定义时…

但是,正则表达式确实有一个或运算符,因此只需应用demorgan定理,并编写一个与无效密码匹配的regex:

少于八个字符的任何东西,或没有数字的任何东西,或没有大写字母的任何东西,或没有小写字母的任何东西,或没有特殊字符的任何东西。

所以:

1
^(.{0,7}|[^0-9]*|[^A-Z]*|[^a-z]*|[a-zA-Z0-9]*)$

如果有匹配的内容,那么它是一个无效的密码。


@anubhava的答案只有一个小小的改进:因为特殊字符仅限于键盘上的字符,所以任何特殊字符都可以使用这个:

^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$

此regex将强制执行以下规则:

  • 至少一个大写英文字母
  • 至少一个小写英文字母
  • 至少一个数字
  • 至少一个特殊字符
  • 最小长度8


根据我的情况,我很难找到最受欢迎的答案。例如,我的验证失败了,使用了诸如;[之类的字符。我对列出我的特殊字符不感兴趣,所以我使用[^\w\s]作为测试-简单地放置-匹配非单词字符(包括数字)和非空白字符。总而言之,这是我的工作……

  • 至少8个字符
  • 至少1数字字符
  • 至少1小写字母
  • 至少1大写字母
  • 至少1特殊字符
1
/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,}$/

JSfiddle链接-简单的演示涵盖了各种情况


更"通用"的版本(?)不允许英文字母作为特殊字符。

1
^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var pwdList = [
    '@@V4-\3Z`zTzM{>k',
    '12qw!"QW12',
    '123qweASD!"#',
    '1qA!"#$%&',
    'Günther32',
    '123456789',
    'qweASD123',
    'qweqQWEQWEqw',
    '12qwAS!'
  ],
  re = /^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$/;
 
  pwdList.forEach(function (pw) {
    document.write('<span style="color:'+ (re.test(pw) ? 'green':'red') + '">' + pw + '</span><br/>');
  });


导入javascript文件jquery.validate.min.js

您可以使用此方法:

1
2
3
$.validator.addMethod("pwcheck", function (value) {
    return /[\@\#\$\%\^\&\*\(\)\_\+\!]/.test(value) && /[a-z]/.test(value) && /[0-9]/.test(value) && /[A-Z]/.test(value)
});
  • 至少一个大写英文字母
  • 至少一个小写英文字母
  • 至少一个数字
  • 至少一个特殊字符

  • 试试这个:

  • 最少6个字符
  • 至少一个大写字符
  • 至少一个小写字符
  • 至少一个特殊字符
  • 表达式:

    1
    "/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&.])[A-Za-z\d$@$!%*?&.]{6, 20}/"

    可选特殊字符:

  • 至少一个特殊字符
  • 至少一个数字
  • 特殊字符是可选的
  • 最少6个字符,最多16个字符
  • 表达式:

    1
    "/^(?=.*\d)(?=.*[a-zA-Z]).{6,20}$/"

    如果不需要最小和最大条件,则取下.{6, 16}

    • 6是最小字符限制
    • 20是最大字符限制
    • ?=表示匹配表达式


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Use the following Regex to satisfy the below conditions:

    Conditions: 1] Min 1 uppercase letter.
                2] Min 1 lowercase letter.
                3] Min 1 special character.
                4] Min 1 number.
                5] Min 8 characters.
                6] Max 30 characters.

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


    我会回复彼得·莫特森,但我的名声不够好。

    他的表述完全符合每一个规定的最低要求。他的表达式不需要特殊字符的问题是,它们也不允许特殊字符,因此它们也强制执行最大要求,我不相信OP请求的。通常情况下,您希望允许用户将其密码设置为他们想要的强密码;为什么要限制强密码?

    因此,他的"最少八个字符,至少一个字母和一个数字"表达式:

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

    达到最低要求,但其余字符只能是字母和数字。要允许(但不要求)特殊字符,应使用如下内容:

    ^(?=.*[A-Za-z])(?=.*\d).{8,}$允许任何字符

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

    同样,"至少八个字符,至少一个大写字母、一个小写字母和一个数字:

    ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$

    满足最低要求,但只允许字母和数字。用途:

    ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$允许任何字符

    ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d$@$!%*?&]{8,}允许特殊字符。


    不是直接回答这个问题,但它真的必须是正则表达式吗?

    我曾经做过很多Perl,并习惯于用regex解决问题。然而,当它们变得更加复杂,有了所有的外观和其他怪癖时,您需要编写几十个单元测试来杀死所有这些小错误。

    此外,regex通常比命令式或函数式解决方案慢几倍。

    例如,下面的scala函数(不是非常fp)解决了原始问题,其速度大约是最流行答案regex的三倍。它的作用也很明显,您根本不需要单元测试:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    def validatePassword(password: String): Boolean = {
      if (password.length < 8)
        return false

      var lower = false
      var upper = false
      var numbers = false
      var special = false

      password.foreach { c =>
        if (c.isDigit)       numbers = true
        else if (c.isLower)  lower = true
        else if (c.isUpper)  upper = true
        else                 special = true
      }

      lower && upper && numbers && special
    }

    根据您的需要,这种模式应该可以正常工作。试试这个,

    1
    ^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}

    只需创建一个字符串变量,分配模式,并创建一个布尔方法,如果模式正确,返回true,否则返回false。

    Sample:

    1
    2
    3
    4
    5
    6
    String pattern ="^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}";
    String password_string ="Type the password here"

    private boolean isValidPassword(String password_string) {
        return password_string.matches(Constants.passwordPattern);
    }

    我在这里发现了很多问题,所以我自己做了。

    在这里,它是在所有的荣耀中,通过测试:

    1
    ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*([^a-zA-Z\d\s])).{9,}$

    https://regex101.com/r/dcrr65/4/tests/测试

    注意事项:

  • 不使用\w,因为这包括我正在测试的_
  • 我在匹配符号时遇到了很多麻烦,没有匹配行尾。
  • 没有特别指定符号,这也是因为不同的地区可能在他们的键盘上有不同的符号,他们可能想使用。

  • 1
    (?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+-]).{6}


    @Clasg已经建议:

    1
    ^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$

    但它不接受下划线作为特殊字符(如aa12345)。

    一个改进的方法是:

    1
    ^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*([^\w\s]|[_]))\S{8,}$

    Use the following Regex to satisfy the below conditions:

    1
    2
    3
    Conditions: 1] Min 1 special character.
                2] Min 1 number.
                3] Min 8 characters or More

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

    Can Test Online: https://regex101.com


    只是我们可以通过使用HTML5来做到这一点。

    在模式属性中使用下面的代码,

    1
    2
    pattern="(?=^.{8,}$)((?=.*\d)(?=.*\W+))(?![.
    ])(?=.*[A-Z])(?=.*[a-z]).*$"

    它会很好地工作。


    您可以使用下面的正则表达式模式来检查密码是否符合您的期望。

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

    在Java/Android中,用至少一个数字、一个字母、一个特殊字符来测试密码:

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


    试试这个:

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

    这个正则表达式非常适合我。

    1
    2
    3
    4
    5
    6
    function myFunction() {
        var str ="c1TTTTaTTT@";
        var patt = new RegExp("^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$");
        var res = patt.test(str);
        console.log("Is regular matches:", res);
    }

    模式至少匹配1个大写字符、1个数字和任何特殊字符,长度在8到63之间。

    "^?= [-Z])(?= [-Z])(?=.*d)[a-z a-zdw]8,63$"

    这种模式用于Java编程。


    希望下面的内容能起作用。我在Azure自定义策略中尝试过。

    ^?= [-Z])(?= [-Z])(?= .d)(?)=.[@$%^&;*-+=[]:',?/~"();!])([A-Za-z\d@#$%^&*\-_+=[\]{}|\\:',?/~"();!"?!@){6,16} $


    1
    (?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$

    在线链接检查https://regex101.com/r/mqgurh/1


    我在前面的一个答案中发现的一个解决方案是:

    至少8个字符,至少1个大写字母、1个小写字母、1个数字和1个特殊字符:"^?= [-Z])(?= [-Z])(?= .d)(?)= $$!%?&;])[a-z a-zd$@$!%?{ 8,}

    …不适用于我,但以下是一个简化版本,效果很好(添加您喜欢的任何特殊字符,我在此处添加),并像添加字母一样添加数字规则:

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