javascript - 我必须制作一个正则表达式,但无法弄清楚语法

标签 javascript regex

正则表达式的规则是:至少 8 个字符,至少使用以下之一:(&%$^#@=),至少有 2 个既不在开头也不在结尾的数字 NOR它们可以在密码中彼此相邻吗?至少有 2 个大写字符和 2 个小写字符。这是我到目前为止所拥有的。我不知道如何让正则表达式不关心字符的顺序。而且我也不知道如何使整个事情需要 8 个字符。

/^[&%$^#@=]{1,}.[0-9(?!0-9)0-9(?!\s)]{2,}[A-Z]{2,}[a-z]{2,}$/;

最佳答案

此经过测试的 JavaScript 函数包含一个带注释的正则表达式,可满足您的验证要求:

function valid_password(text) {
    /*#!(?#!js re_password Rev:20160409_0700)
        # Password validation with multiple requirements.
        ^                         # Anchor to start of string.
        (?=[^&%$^#@=]*[&%$^#@=])  # Use at least one (&%$^#@=).
        (?=(?:\D*\d){2})          # Have at least 2 numbers.
        (?!\d)                    # Numbers not at the beginning.
        (?!.*\d$)                 # Numbers not at the end.
        (?=\D*(?:\d\D+)+$)        # Numbers not next to each other.
        (?=(?:[^A-Z]*[A-Z]){2})   # At least 2 uppercase.
        (?=(?:[^a-z]*[a-z]){2})   # At least 2 lowercase.
        .{8,}                     # Be at least 8 characters.
        $                         # Anchor to end of string.
    !#*/
    var re_password = /^(?=[^&%$^#@=]*[&%$^#@=])(?=(?:\D*\d){2})(?!\d)(?!.*\d$)(?=\D*(?:\d\D+)+$)(?=(?:[^A-Z]*[A-Z]){2})(?=(?:[^a-z]*[a-z]){2}).{8,}$/;
    if (text.match(re_password)) { return true; }
    return false;
}

请注意,此正则表达式演示了如何在字符串开头的位置应用多个 AND 逻辑条件。另请注意,上面正则表达式中数字要求的多个条件可以合并为单个断言 - 它们在此处以详细形式(多个断言样式)呈现,以演示所使用的技术。

希望这有帮助!

关于javascript - 我必须制作一个正则表达式,但无法弄清楚语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36517322/

相关文章:

javascript - 只有最后一次循环迭代才能成功注册我的点击事件?

javascript - JS 正则表达式不匹配,即使它与正则表达式测试器一起工作

正则表达式任何 ASCII 字符

javascript - 将 CSS 应用于事件路由器链接 [Angular 2]

java - 如何使用 javascript 从 HTML 调用服务器端 java 方法?

javascript - 未知 vendor | Angular Bootstrap 颜色选择器

python - 正则表达式帮助匹配组

javascript - JavaScript花絮如何将远程小部件插入到页面上?

c++ - 正则表达式替换:到 ":"等

字符串 RE2 谷歌表格上的正则表达式否定查询