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

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

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

  • 将数字和/或字母按 3 个或更多的顺序排列是不行的。

    例子:

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

    谢谢

    最佳答案

    据我所知,没有办法使用 RegEx,但这是一种天真的函数式方法。

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

    其次,再次循环遍历字符串并比较检查接下来的两个字符与当前字符是否连续。

    如果两个循环都未能找到连续字符,则函数返回真,否则返回假。

    前四个返回 false(失败),而后三个返回 true(通过)。

    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>');

    关于javascript - 使用顺序字母和数字验证密码 - RegEx,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32852339/

    10-12 14:10
    查看更多