首页 > 解决方案 > 我无法让我的正则表达式代码按预期工作

问题描述

我有这个 Regex-Javascript-Code 来检查 8 到 50 个字符之间的密码,其中至少包含一个小写字母、一个大写字母、一个数字和一个特殊字符。

var passwordformat = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9])(?!.*\s).{8,50}$/;

现在,只有当这 4 个术语中至少有 2 个有效时,我才应该有一个 Redex-Code 为真。我怎样才能使用我的 Regex-Code 来实现这一点?

我从未编写过正则表达式代码。此代码是从网上复制的。

标签: javascriptregex

解决方案


这可能很难通过单个正则表达式来实现,但通过代码很容易处理:

function checkPassword (password) {
    var counter = 0;

    if (/[a-z]/.test(password)) {
        ++counter;
    }
    if (/[A-Z]/.test(password)) {
        ++counter;
    }
    if (/[0-9]/.test(password)) {
        ++counter;
    }
    if (/[^A-Za-z0-9]/.test(password)) {
        ++counter;
    }

    if (counter >= 2 && password.length >= 8 && password.length <= 50) {
        return true;
    }
    else {
        return false;
    }
}

var password = "Aa1@blah";
if (checkPassword(password)) {
    console.log("MATCH");
}

上面的逻辑简单地迭代了 4 个密码要求并保留了一个计数器。有效密码是满足至少两个标准并且还满足长度要求的密码。


推荐阅读