密码 REGEX,最少 6 个字符,至少一个字母和一个数字,可能包含特殊字符

IT技术 javascript asp.net regex
2021-02-07 10:37:26

我需要一个带条件的正则表达式:

  • 最少 6 个字符,最多 50 个字符
  • 必须包含 1 个字母
  • 必须包含 1 个数字
  • 可能包含特殊字符,如 !@#$%^&*()_+

目前我有模式: (?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{6,50})$

但是它不允许特殊字符,有人有好的正则表达式吗?

谢谢

6个回答

也许可以使用单个正则表达式,但这使得很难向用户反馈他们不遵循的规则。像这样的更传统的方法为您提供反馈,您可以在 UI 中使用这些反馈来告诉用户哪些密码规则没有得到满足:

function checkPwd(str) {
    if (str.length < 6) {
        return("too_short");
    } else if (str.length > 50) {
        return("too_long");
    } else if (str.search(/\d/) == -1) {
        return("no_num");
    } else if (str.search(/[a-zA-Z]/) == -1) {
        return("no_letter");
    } else if (str.search(/[^a-zA-Z0-9\!\@\#\$\%\^\&\*\(\)\_\+]/) != -1) {
        return("bad_char");
    }
    return("ok");
}

在 jfriend00 回答之后,我写了这个小提琴来测试他的解决方案,并进行一些小改动以使其更加直观:

http://jsfiddle.net/9RB49/1/

这是代码:

checkPwd = function() {
    var str = document.getElementById('pass').value;
    if (str.length < 6) {
        alert("too_short");
        return("too_short");
    } else if (str.length > 50) {
        alert("too_long");
        return("too_long");
    } else if (str.search(/\d/) == -1) {
        alert("no_num");
        return("no_num");
    } else if (str.search(/[a-zA-Z]/) == -1) {
        alert("no_letter");
        return("no_letter");
    } else if (str.search(/[^a-zA-Z0-9\!\@\#\$\%\^\&\*\(\)\_\+\.\,\;\:]/) != -1) {
        alert("bad_char");
        return("bad_char");
    }
    alert("oukey!!");
    return("ok");
}

顺便说一句,它的工作就像一个魅力!;)

最好的问候,当然要感谢 jfriend00!

匹配这些(常见)密码要求的更优雅和自包含的正则表达式是:

^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d^a-zA-Z0-9].{5,50}$

这里优雅之处在于您不必对诸如 $@# 等符号进行硬编码

要接受所有符号,您只需说:“也接受所有非字母数字字符和数字”。

最小和最大字符数要求

正则表达式的最后一部分{5,50}是最小和最大字符数,如果输入的密码少于 6 或超过 50 个字符,则正则表达式返回不匹配。

我知道这是一个旧线程,但我需要一个正则表达式密码验证器,但我无法得到这些答案中的任何一个。我已经在正则表达式网站上尝试过你的。不行。这是(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d^a-zA-Z0-9].{6,}$要验证的字符串At least 1 uppercase, 1 number and one special char
2021-03-30 10:37:26
  1. 检查 7 到 16 个字符之间的密码,其中只包含字符、数字、下划线和第一个字符必须是字母-

    /^[A-Za-z]\w{7,14}$/

  2. 检查 6 到 20 个字符之间的密码,其中至少包含一位数字、一位大写字母和一位小写字母

    / ^(?=。\ d)(?=。 [AZ])(?=。* [AZ])。{6,20} $ /

  3. 检查 7 到 15 个字符之间的密码,其中至少包含一个数字和一个特殊字符

    / ^(?=。[0-9])(?=。 [!@#$%^&])[A-ZA-Z0-9!@#$%^& ] {7,15} $ /

  4. 检查 8 到 15 个字符之间的密码,其中至少包含一个小写字母、一个大写字母、一个数字和一个特殊字符

    /^(?=. \d)(?=. [az])(?=. [AZ])(?=. [^a-zA-Z0-9])(?!.*\s).{ 8,15}$/

我希望这会帮助某人。有关更多信息,请查看本文和此站点 regexr.com
第 2 项不起作用。对于需要政策的人,欢迎使用这个 /^(?=.*\d)(?=.*[az])(?=.*[AZ]).{6,20}$/
2021-03-17 10:37:26

我有一个正则表达式,但它有点棘手。

^(?:(?<Numbers>[0-9]{1})|(?<Alpha>[a-zA-Z]{1})|(?<Special>[^a-zA-Z0-9]{1})){6,50}$

让我解释一下以及如何检查测试的密码是否正确:

正则表达式中有三个命名组。1) "Numbers": 将匹配字符串中的单个数字。2) "Alpha":将匹配从 "a" 到 "z" 或 "A" 到 "Z" 的单个字符 3) "Special":将匹配不是 "Alpha" 或 "Numbers" 的单个字符

这三个命名组被分组在一个备用组中,并{6,50}建议正则表达式机器捕获上述组中的至少 6 个,但不超过 50 个。

为确保输入正确的密码,您必须检查是否匹配,然后检查匹配的组是否按您的需要捕获。我是一名 C# 开发人员,不知道它在 javascript 中是如何工作的,但在 C# 中,您必须检查:

match.Groups["Numbers"].Captures.Count > 1

希望它在 javascript 中也能正常工作!祝你好运!

我的正则表达式并不惊人,但这似乎允许 6 到 50 个字符集,它不要求值至少包含每个字符集,我可以有 6 到 50 个数字或字母,但也许我每组都没有一个
2021-03-15 10:37:26