我想让该输入至少采用一个小写字母、一个大写字母、仅 2 个数字 0-9 和至少 8 个字符(不超过 2 个数字) 我尝试这个模式
(?=(?:.*\d){2})(?=.*[A-Z])(?=.*[a-z]).{8,}
意思是,必须需要4个字符(2个数字+1个小写字母+1个大写字母),其他字符可以是任何字符。
我也尝试过这种模式
(?=(?:.*\d){2})(?=.*[A-Z])(?=.*[a-z])[^0-9]{8,}
还有这个
(?=(?:.*\d){2})(?=.*[A-z])(?=.*[a-z])[A-z!"#$%&'()*+,-.\/:;<=>?@[\]^_{|}~]{8,}
.但是任何事情都无法按照我的需要工作。
我想要喜欢...
Abc4k9h2L ->FALSE
Abc4k9hL+ ->TRUE
Abc4l@s$kl4 ->TRUE
如何做到这一点?
最佳答案
您可以稍微修改一下正则表达式
^(?=^[^\d]*\d[^\d]*\d[^\d]*$)(?=.*[a-z])(?=.*[A-Z]).{8,}$
const regex = /^(?=^[^\d]*\d[^\d]*\d[^\d]*$)(?=.*[a-z])(?=.*[A-Z]).{8,}$/;
const arr = ['123456789', 'abcdefghi', 'ABCDEFGHI', 'abcdABC12', 'abcdABCD1', '.12nabdh#A','Abc4k9h2L','Abc4k9hL+','Abc4l@s$kl4']
arr.forEach(str => {
console.log(str, regex.test(str))
})
如果您需要相同的简化方式,您可以执行类似的操作,请单独检查各个规则
const regex = /^(?=^[^\d]*\d[^\d]*\d[^\d]*$)(?=.*[a-z])(?=.*[A-Z]).{8,}$/;
const arr = ['123456789', 'abcdefghi', 'ABCDEFGHI', 'abcdABC12', 'abcdABCD1', '.12nabdh#A', 'Abc4k9h2L', 'Abc4k9hL+', 'Abc4l@s$kl4']
arr.forEach(str => {
let length = str.length > 7
let checkLowerCase = /[a-z]/.test(str)
let checkUpperCase = /[A-Z]/.test(str)
let digits = str.match(/\d/g)
let twoDigits = digits && digits.length === 2
let final = Boolean(length && checkLowerCase && checkUpperCase && twoDigits)
console.log(str, final)
})
关于javascript - 正则表达式只有 8 个字符长,但不超过 2 个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57942488/