javascript - 正则表达式 至少使用 3 个任意字符

标签 javascript regex

我正在创建一个密码验证,要求是如果使用某个字符,则必须使用该字符3次,例如AABBBB、AABBAB或A999000AA。

我有一些限制每个字符使用3次的方法:^(?:(.)(?!(?:.*?\1){3}))*$

如何确保每个字符至少出现 3 次?

最佳答案

你可以这样做:

  1. 对字符串进行排序(这会降低复杂性)
  2. /^(?:(.)\1{2})+$/ 测试与三元组一个矿石匹配的正则表达式更多次。

function isStringValid(s) {
  
  return !!s
    .split("")
    .sort()
    .join("")
    .match(/^(?:(.)\1{2})+$/)
  ;
}


/** IGNORE THE REST **/
function ValidateCtrl() {
  var field = document.querySelector('#Test');
  var btn = document.querySelector('#Validate');
  
  function checkValue() {
    
    console.log('val', isStringValid(field.value));
  } 
  
  btn.addEventListener('click', checkValue);
}

document
  .addEventListener('DOMContentLoaded', ValidateCtrl)
;
#Test { 
  margin-top: 20px;
  display: block;
}
<button type="button" id="Validate">Validate</button>
<input id="Test" />

更新

如果您需要至少出现 3 次 相同字符:

  • /^(?:(.)\1{2,})+$/

最后\w仅匹配[a-zA-Z0-9_]:

  • /^(?:(\w)\1{2,})+$/

关于javascript - 正则表达式 至少使用 3 个任意字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41066597/

相关文章:

javascript - 以编程方式触发 Ctrl+S

regex - 如何在第 9 个反向引用之后对正则表达式进行分组?

regex - Sublime regex 用捕获组替换合并替换文本

javascript - 从 jasmine 获取种子随机数

javascript - 方括号前的 at 符号

javascript - 如何在内容脚本中使用 Flowplayer 函数?

javascript - 更新溢出而不从 div 中删除元素?

javascript - 正则表达式替换值和字符之间

java - 正则表达式匹配文件名

regex - 正则表达式: Is there an AND operator?