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

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

它不能是您的旧密码,也不能包含您的用户名、“密码”或“网站名称”

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

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

如果密码必须是八个字符,包括一个大写字母、一个特殊字符和字母数字字符,我怎么写?


当前回答

根据我的情况,我很难找到最流行的答案。例如,我的验证失败,出现以下字符:;或[。我对白色列出我的特殊字符不感兴趣,因此我使用[^\w\s]作为测试-简单地放-匹配非单词字符(包括数字)和非空格字符。总而言之,这是对我有用的。。。

至少8个字符至少1个数字字符至少1个小写字母至少1个大写字母至少1个特殊字符


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

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

其他回答

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

我曾经做过很多Perl,并习惯于用正则表达式解决问题。然而,当它们变得更加复杂时,你需要编写几十个单元测试来消除所有这些小bug。

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

例如,以下(不是非常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
}

对于标准密码要求,我发现这很有用:

至少1个字母表至少1位不包含空格可选特殊字符,例如@$!%*#&^_-至少8个字符长/^(?=.*[A-Za-z])(?=..*\d)[A-Za-z\d@$!%*#?&^_-]{8,}$/

您还可以将上限设置为例如{8,32},最多32个字符。

希望以下方法有效。我在Azure自定义策略中尝试了此操作。

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

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

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

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

如果您不喜欢使用正则表达式。因此,本模块帮助很大:https://www.npmjs.com/package/password-validator

var passwordValidator = require('password-validator');
 
// Create a schema
var schema = new passwordValidator();
 
// Add properties to it
schema
.is().min(8)                                    // Minimum length 8
.is().max(100)                                  // Maximum length 100
.has().uppercase()                              // Must have uppercase letters
.has().lowercase()                              // Must have lowercase letters
.has().digits(2)                                // Must have at least 2 digits
.has().not().spaces()                           // Should not have spaces
.is().not().oneOf(['Passw0rd', 'Password123']); // Blacklist these values
 
// Validate against a password string
console.log(schema.validate('validPASS123'));
// => true
console.log(schema.validate('invalidPASS'));
// => false