【问题标题】:Why password validation fail using regex? [duplicate]为什么使用正则表达式验证密码失败? [复制]
【发布时间】:2019-08-29 06:16:51
【问题描述】:
我正在尝试使用正则表达式验证密码。我的情况是
密码应该有
- 一个特殊字符
- 一个号码
- 一个小写字母
- 一个大写
- 最少 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')
}