为什么密码验证使用正则表达式失败?

Why password validation fail using regex?

我正在尝试使用正则表达式验证密码。我的条件是 密码应该有

  1. 一个特殊字符
  2. 一个数
  3. 一个小写字母
  4. 一个大写字母
  5. 最少 8 个字符

下面是我的代码片段

var a = "Test@123"
if (/^(?=.[a-z])(?=.[A-Z])(?=.\d)(?=.[@$!%?&])[A-Za-z\d@$!%?&]{8,}$/.test(a)) {
  console.log('=====true')
} else {
  console.log('false')
}

它应该在控制台上显示 true。但目前显示 false 为什么?

您在正向预测中错过了量词,目前

   (?=.[a-z])

这里 . 表示匹配除新行之外的任何内容,因为没有量词,所以它只会匹配一次,[a-z] 表示匹配小写字母一次,所以你所有的正面前瞻都是在索引处寻找值1 永远无法满足所有正前瞻条件,因为我们在每个正前瞻中寻找不同的不同值,

所以当我们使用 (?=.*[a-z]) 量词时,这意味着匹配任何零次或多次,然后后面应该跟小写字母,所以它使条件之前的值动态化

var a = "Test@123"
if (/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%?&])[A-Za-z\d@$!%?&]{8,}$/.test(a)) {
  console.log('=====true')
} else {

  console.log('false')
}