javascript - 正则表达式只有 8 个字符长,但不超过 2 个数字

标签 javascript regex

我想让该输入至少采用一个小写字母、一个大写字母、仅 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,}$

enter image description here

Regex demo

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/

相关文章:

regex - Vim:如何只搜索和替换每一行的一部分?

regex - 查找最里面的大括号中以给定子字符串的单词开头的文本

javascript - 对象数组javascript

javascript - 如何触发 VueJ

javascript - 如何在 CodeMirror 编辑器中使用 selenium 模拟关键事件

python - 正则表达式 split 方法中的分隔符无法正常工作

javascript - PhpStorm 替换为 js 正则表达式

javascript - 类型错误 : t is undefined

javascript - 在 Chromium 上加载 HTTPS 页面时注入(inject) JS 错误

xQuery 中用于标记化的正则表达式