使用顺序字母和数字进行密码验证 - RegEx

Elv*_*vis 2 javascript regex password-protection

为了使客户帐户更安全,精心设计的密码是一种很好的做法.这是我的正则表达式字符串,用于密码验证.

/^(?=.*[0-9])(?!.*?\d{3})(?=.*[a-zA-Z])(?!.*?[a-zA-Z]{3})(?=.*[~!@#$%^&*()+-?])([a-zA-Z0-9~!@#$%^&*()+-?]{8,})$/
Run Code Online (Sandbox Code Playgroud)

代表:

  • 8个或更多字符.
  • 大写字母AZ
  • 小写字母az
  • 特殊字符〜!@#$%^&*()+ - ?
  • 这个正则表达式函数是什么?:不得包含最多3个连续字母和/或数字.

按顺序排列数字和/或字母不是很好.

例:

不行= efg123!$,abcd567%,xyz789 ^&,#hijk23456
OK = ryiiu562 @,erty745#,gjnfl45566 ^

谢谢

小智 6

我不知道如何使用RegEx,但这是一种天真的功能方法.

首先,循环遍历字符串,并通过向当前索引添加+1和+2并相应地进行比较,将每个字符与接下来的两个字符进行比较.

其次,再次遍历字符串并比较检查当前字符的后两个字符,看它们是否是连续的.

如果两个循环都找不到连续字符,则该函数返回true,否则返回false.

前四个返回false(失败),而后三个返回true(pass).

function test(s) {
    // Check for sequential numerical characters
    for(var i in s) 
        if (+s[+i+1] == +s[i]+1 && 
            +s[+i+2] == +s[i]+2) return false;
    // Check for sequential alphabetical characters
    for(var i in s) 
        if (String.fromCharCode(s.charCodeAt(i)+1) == s[+i+1] && 
            String.fromCharCode(s.charCodeAt(i)+2) == s[+i+2]) return false;
    return true;
}

// For demo purposes only
var tests = [
    'efg123!$',
    'abcd567%',
    'xyz789^&',
    '#hijk23456',
    'ryiiu562@',
    'erty745#',
    'gjnfl45566^'
], sep = '\t\u2192 ', out = ['Fail','Pass'], eol = '<br>';
document.write('<pre>');
for(var i in tests) document.write(tests[i] + sep + out[+test(tests[i])] + eol);
document.write('</pre>');
Run Code Online (Sandbox Code Playgroud)