【问题标题】:I can't get my Regex-Code to work as intended [duplicate]我无法让我的正则表达式代码按预期工作[重复]
【发布时间】:2021-01-16 03:39:21
【问题描述】:

我有这个 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 来实现这一点?

我从未编写过正则表达式代码。这段代码是网上抄来的。

【问题讨论】:

  • 请发布输入和预期输出示例
  • @mplungjan 如果我的密码至少包含这 4 个因素中的 2 个(至少一个小写字母、一个大写字母、一个数字和一个特殊字符。)它应该是有效的。如果不是,我应该返回它是无效的
  • 我认为你不能用正则表达式来做到这一点。正则表达式没有逻辑,不会计算密码满足的条件数。它们只匹配模式。你需要一些额外的逻辑。此外,带有象形文字和玛雅符号的超级安全超级复杂密码是让您的用户将其写在便利贴上并将其留在世人面前的最佳方式,这违背了所有安全目的。
  • @JeremyThille 或只使用密码管理器
  • 如何使用 4 个正则表达式,每个条件一个,然后一个接一个地检查它们?

标签: javascript regex


【解决方案1】:

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

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 个密码要求并保留了一个计数器。有效密码是至少满足两个条件并满足长度要求的密码。

【讨论】:

    猜你喜欢
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    相关资源
    最近更新 更多