首页 > 解决方案 > javascript验证密码中的随机字符,如“a1a,aKa,a$a,aJ^lG,G78%s#

问题描述

我有一个密码更改页面,我想用“2 个小写字母、2 个大写字母、3 个符号、2 个数字等来验证我的密码。现在从下面的代码中,我可以按顺序验证密码,例如“ aa, KK,ap, JK, 90, 89" 但不适用于 " aK9Ju, a^rtH, hGT5$u 等。

我只是粘贴小写字母的代码,如果您愿意,我可以提供整个代码。

psw.onkeyup = function() {
var LC = jsonData.LOWERCASE;
var psw = document.getElementById("psw").value.replace(/([a-z])\d+/g, '$1');
var lowerCaseLetters = new RegExp('[a-z]{' + LC + '}', 'g')
if(psw.match(lowerCaseLetters)) {
letter.classList.remove("invalid");
letter.classList.add("valid");
} else {
letter.classList.remove("valid");
letter.classList.add("invalid");
}

所以,我的要求是我输入密码的方式应该验证相同。

标签: javascriptregex

解决方案


我为您创建了一个具有 3 个约束的工作示例: - 2 个小写字母 - 2 个大写字母 - 2 个数字如果您需要添加一个约束,您只需编写一个简单的正则表达式来匹配该单个约束,并将其连接到现有的 if 语句通过&&. 我使用了一个函数来计算从这里出现的正则表达式匹配的次数。

function testPassword(){
  var pw = document.getElementById("password").value;
  if ( count(pw, /[a-z]/g) > 1 &&
       count(pw, /[A-Z]/g) > 1 &&
       count(pw, /[0-9]/g) > 1 &&
       count(pw,/\W|_/g) > 1                     //special chars
     ){
        
        alert("success")
       
       
       }
        
}

const count = (str,pattern) => {
  const re = pattern
  return ((str || '').match(re) || []).length
}
<input id="password" type="text">
<input type="submit" id="submit" onClick="testPassword()">


推荐阅读