【问题标题】:Why password validation fail using regex? [duplicate]为什么使用正则表达式验证密码失败? [复制]
【发布时间】:2019-08-29 06:16:51
【问题描述】:

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

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

下面是我的代码sn-p

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 为什么?

【问题讨论】:

    标签: javascript regex regex-lookarounds


    【解决方案1】:

    您目前在正向前瞻中错过了量词

       (?=.[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')
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-03
      • 2019-06-24
      • 2021-10-17
      相关资源
      最近更新 更多