首页 文章

密码的正则表达式必须包含至少八个字符,至少一个数字以及大写和小写字母和特殊字符

提问于
浏览
260

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

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

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

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

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

我怎么能为 a password must be eight characters including one uppercase letter, one special character and alphanumeric characters 写它?

23 回答

  • 2

    试试这个:

    • 最少六个字符

    • 至少一个大写字符

    • 至少一个小写字符

    • 至少有一个特殊字符

    Expression:

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

    可选特殊字符:

    • 至少有一个特殊字符

    • 至少一个号码

    • 特殊字符是可选的

    • 最少六个字符,最多16个字符

    Expression:

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

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

    • 6 是最小字符限制

    • 20 是最大字符限制

    • ?= 表示匹配表达式

  • 1

    你可以使用这个正则表达式:

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

    此正则表达式将强制执行以下规则:

    • 至少一个大写English letter(?=.*?[A-Z])

    • 至少一封小写英文字母, (?=.*?[a-z])

    • 至少一位数, (?=.*?[0-9])

    • 至少有一个特殊字符, (?=.*?[#?!@$%^&*-])

    • 最小长度为 .{8,} (带锚点)

  • 0

    我在上一个答案中找到的解决方案如下:

    至少8个字符至少1个大写字母,1个小写字母,1个数字和1个特殊字符:“^(?= . [az])(?= . [AZ])(?= . \ d)(?= . [ $ @ $!%?&])[A-ZA-Z \ d $ @ $!%?&] {8}”

    ...对我来说不起作用,但以下是简化版本并且效果很好(添加您喜欢的任何特殊字符,我在这里添加#),并添加数字规则,就像使用字母一样:

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

    @ClasG已经suggested

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

    但它不接受_(下划线)作为特殊字符(例如Aa12345_) .

    一个改进的是:

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

    更多"generic"版本(?),不允许任何英文字母作为特殊字符 .

    ^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$
    
    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>
    '); });
  • 756

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

    “^(?= [A-Z])(?= [A-Z])(?= . * \ d)[A-ZA-Z \ d \ W] {8.63} $”

    该模式用于JAVA编程 .

  • 4

    正则表达式没有AND运算符,因此很难编写匹配有效密码的正则表达式,当有效性由某些东西和其他东西定义时,其他东西......

    但是,正则表达式确实有一个OR运算符,所以只需应用DeMorgan的定理,并编写一个匹配无效密码的正则表达式:

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

    所以:

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

    如果有任何匹配,那么它是一个无效的密码 .

  • 234

    对于我的情况,我遇到了最受欢迎的答案 . 例如,我的验证失败了 ;[ 等字符 . 我对列入我的特殊字符不感兴趣,所以我改为利用 [^\w\s] 作为测试 - 简单地把 - 匹配非单词字符(包括数字)和非空白字符 . 总结一下,这对我有用...

    • 至少 8 个字符

    • 至少 1 数字字符

    • 至少 1 小写字母

    • 至少 1 大写字母

    • 至少 1 特殊字符


    /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,}$/
    

    JSFiddle Link - 涵盖各种案例的简单演示

  • 46

    希望以下工作 . 我在Azure自定义策略中尝试了这个 .

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

  • 24

    试试这个:

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

    这个正则表达式对我很有用 .

    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);
    }
    
  • 11

    我会回复Peter Mortensen,但我没有足够的声誉 .

    他的表达对于每个指定的最低要求都是完美的 . 他的表达式不需要特殊字符的问题是它们也不允许特殊字符,因此它们也强制执行最大要求,我不相信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,} 允许特定的特殊字符 .

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

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

    我曾经做过很多Perl,并习惯于解决正则表达式的问题 . 然而,当他们变得更复杂的所有前瞻和其他怪癖时,你需要编写几十个单元测试来杀死所有这些小错误 .

    此外,正则表达式通常比命令式或功能性解决方案慢几倍 .

    例如,以下(不是非常FP)Scala函数解决原始问题的速度比最流行答案的正则表达式快三倍 . 它的作用也很清楚,你根本不需要进行单元测试:

    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
    }
    
  • 0

    使用以下Regex来满足以下条件:

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

    正则表达式:^(?= . * \ d)(?= . * [#$ @!%&*?])[A-Za-z \ d#$ @!%&*?] {8,} $ Can在线测试:https://regex101.com

  • 0

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

    "^(?=.*[A-Za-z])(?=.*\d)[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)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$"
    

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

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

    @ anubhava的回答只是一个小小的改进:由于特殊字符仅限于键盘中的特殊字符,因此可以将其用于任何特殊字符:

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

    此正则表达式将强制执行以下规则:

    • 至少一个大写英文字母

    • 至少一封小写英文字母

    • 至少一位数

    • 至少有一个特殊字符

    • 至少八个长度

  • 0

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

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

    我们可以使用HTML5来做到这一点 .

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

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

    它会很完美 .

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

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

  • 5

    在Java / Android中,要使用以下模式测试至少包含一个数字,一个字母,一个特殊字符的密码:

    "^(?=.*[A-Za-z])(?=.*\\d)(?=.*[$@$!%*#?&])[A-Za-z\\d$@$!%*#?&]{8,}$"
    
  • 6
    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}$/
    
  • 2

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

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

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

    样品:

    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);
    }
    
  • 0

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

    您可以使用此方法:

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

    • 至少一封小写英文字母

    • 至少一位数

    • 至少有一个特殊字符

相关问题