为什么密码验证使用正则表达式失败?
Why password validation fail using regex?
我正在尝试使用正则表达式验证密码。我的条件是
密码应该有
- 一个特殊字符
- 一个数
- 一个小写字母
- 一个大写字母
- 最少 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')
}
我正在尝试使用正则表达式验证密码。我的条件是 密码应该有
- 一个特殊字符
- 一个数
- 一个小写字母
- 一个大写字母
- 最少 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')
}