Javascript中的正则表达式用于密码验证

时间:2016-12-15 07:45:50

标签: javascript regex

我正在尝试创建一个正则表达式,用于在创建用户密码时对其进行验证。密码必须是:

  1. 至少6个字符,可以是任何类型的字符
  2. 使用的每个字符都需要在密码中正好出现3次。
  3. 很好的例子:

    AAABBB
    ABABBA
    +++===
    +ar++arra
    myyymm
    /Arrr/AA/
    

    有谁知道哪个正则表达式可以实现这个目标?

3 个答案:

答案 0 :(得分:2)

您可以在测试之前对密码进行排序,从而轻松自己:



$('button').on('click', function(){
var s = $('#password').val();
var split = s.split("").sort().join("");
if(/^(?:(.)\1{2}(?!\1)){2,}$/.test(split))
   console.log("Valid password");
else
   console.log("Invalid password");
})

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<input id="password">
<button>Test me</button>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

对于第一个选项,您必须在没有正则表达式的情况下进行检查。

var str = "your password";
var pattern = /(.)(.*\1){3}/;
if(str.length >= 6){
   // It will give you boolean as return
   // If it is match then it return true else false
   pattern.test(str);
}

答案 2 :(得分:0)

另一种解决方案,因为你允许代码(你的问题意味着你不会;)

使用下面verifyPass之类的函数应该可以解决问题。它逐渐用空字符串替换任何有效的三字母组合。检查这是在多次迭代中完成的(它至少是6个字符)并最后以空字符串结尾,这意味着它是一个有效的密码。

function verifyPass(pass) {
  var re = /^(.)((?:(?!\1).)*)\1((?:(?!\1).)*)\1((?:(?!\1).)*)$/,
      cnt=0;

  while(re.test(pass)) {
    pass = pass.replace(re, '$2$3$4');
    cnt++;
  }
  return pass==='' && cnt>1;
}

var testItems = [
      '123123123',
      'AAABBB',
      'AAABBBAAA',
      'Qwerty',
      'ABABBA',
      '+++===',
      '111',
      'qweqwd',
      'sdcjhsdfkj',
      '+ar++arra',
      'mYYYmms',
      '/Arrr/AA/'
  ];
  
  testItems.forEach(function(item) {
    document.write('<span style="color:' + (verifyPass(item) ? 'green' : 'red') + ';">' + item + '</span> <br/>');
  });