当前位置: 首页 > 知识库问答 >
问题:

ASP.net 中强密码的正则表达式

祁飞飙
2023-03-14

我需要检查包含以下 4 项中的 3 项的密码:

  1. 小写字母
  2. 大写字母
  3. 数字字符
  4. 特殊字符(如 %, $, #, ...)

密码的长度必须在 6 到 20 个字符之间。我目前有这个:

public void ChangePassword(string password)
    {

        Regex regex1 = new Regex("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]){6,20}$");
        Regex regex2 = new Regex("^(?=.*[0-9])(?=.*[a-z])(?=.*?[#?!@$%^&*-]){6,20}$");
        Regex regex3 = new Regex("^(?=.*[0-9])(?=.*[A-Z])(?=.*?[#?!@$%^&*-]){6,20}$");
        Regex regex4 = new Regex("^(?=.*[a-z])(?=.*[A-Z])(?=.*?[#?!@$%^&*-]){6,20}$");
        Regex regex5 = new Regex("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*?[#?!@$%^&*-]){6,20}$");

        Match match1 = regex1.Match(password);
        Match match2 = regex2.Match(password);
        Match match3 = regex3.Match(password);
        Match match4 = regex4.Match(password);
        Match match5 = regex5.Match(password);

        if (match1.Success || match2.Success || match3.Success ||
            match4.Success || match5.Success)
        {

            Password = password;

        }
        else
        {
            throw new PasswordNotGoodException();
        }
    }

但是,这根本不匹配任何东西。这是一个学校项目,所以我真的可以使用一些帮助。

共有2个答案

糜昌胤
2023-03-14

这里的最后一个重复是错误的:

Regex regex1 = new Regex("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]){6,20}$");

改为:

Regex regex1 = new Regex("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{6,20}$");
//                                   notice the dot here ___^

对于您的所有正则表达式来说都是一样的。

史俊德
2023-03-14

您可以使用以下方法代替 REGEX:

string password = "aA1%";
HashSet<char> specialCharacters = new HashSet<char>() { '%', '$', '#' };
if (password.Any(char.IsLower) && //Lower case 
     password.Any(char.IsUpper) &&
     password.Any(char.IsDigit) &&
     password.Any(specialCharacters.Contains))
{
  //valid password
}

更简单和干净。

编辑:

如果您需要这 4 个条件中的至少 3 个为真,您可以执行以下操作:

int conditionsCount = 0;
if (password.Any(char.IsLower))
    conditionsCount++;
if (password.Any(char.IsUpper))
    conditionsCount++;
if (password.Any(char.IsDigit))
    conditionsCount++;
if (password.Any(specialCharacters.Contains))
    conditionsCount++;

if (conditionsCount >= 3)
{
    //valid password
}
 类似资料:
  • 我需要密码规则。以下是规则。 密码必须遵循以下准则: > 至少有八个字符长 包含这4个选项中的3个:小写字母、大写字母、数字或特殊字符 当用户指定不符合上述规则的密码时,返回消息说明: 密码长度必须至少为8个字符,并包含以下4个选项中的3个: 小写字母(a-z) 大小写字母(A-Z) 数字(0-9) 特殊字符 (! @#$%^ 请帮助我获得一个正则表达式来处理上述条件。 我感谢你的帮助。以下是我的

  • 本文向大家介绍使用正则表达式判断密码强弱,包括了使用正则表达式判断密码强弱的使用技巧和注意事项,需要的朋友参考一下 学python的re模板,写了个文章发现没人看,所以总结出来经验,理论没人爱,实战的人心,那么既然没人喜欢理论就直接上实战,在实战中精炼理论.不多说直接先上代码 解释一下 弱密码:全是数字,符号,字母 中等密码:数字加上符号,数字加上字母,字母加上符号 强密码:三个混合. 我没有区分

  • 问题内容: 我在网上找到了一个脚本,并且在JavaScript中有一个密码正则表达式。我仍然想使用它,但是为了获得更高的安全性,我也想使用PHP来验证我的密码,但是我对正则表达式毫无用处。 要求: 必须至少8个字符 必须包含至少1个数字 必须至少包含一个大写字符 必须至少包含一个小写字符 如何构造正则表达式字符串以满足这些要求? 问题答案: 我发现在一个大的正则表达式中执行此操作有点像代码维护的噩

  • 问题内容: 我已经在网上看到以下正则表达式。 仅当字符串: 我想知道如何转换此正则表达式,以便将字符串检查为 好吧,如果它至少包含2个大写,小写,数字和特殊字符,那么我就不需要8个字符的长度。 特殊字符包括: `〜!@#$%^&*()_- + = [] \ | {} ;:’“。,/ <>? 问题答案: 适应该正则表达式的最佳方法是将其剔除并编写一些代码。所需的正则表达式非常长且复杂,编写后两小时您

  • 本文向大家介绍js正则表达式验证密码强度【推荐】,包括了js正则表达式验证密码强度【推荐】的使用技巧和注意事项,需要的朋友参考一下 效果图: 代码如下: 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持呐喊教程!

  • 我有以下密码验证规则: 至少8个字符 我试图找到这个规则的正则表达式模式,最接近的是: 但这并不适用于所有规则。 我对正则表达式是新手,如果有任何可以学习正则表达式的资源,我将不胜感激。

  • 问题内容: 谁能帮助我创建用于密码验证的正则表达式。 条件为“密码必须包含8个字符和至少一个数字,一个字母和一个唯一字符,例如 问题答案:

  • 本文向大家介绍JS 密码强度校验的正则表达式(简单且好用),包括了JS 密码强度校验的正则表达式(简单且好用)的使用技巧和注意事项,需要的朋友参考一下 最近一直在做通行证项目,里面的注册模块中输入密码需要显示密码强度(低中高)。今天就把做的效果给大家分享下,代码没有网上搜索的那么复杂,能够满足一般的需求。 html 代码如下: js 代码如下: 效果图: 使用说明: 1、对象的第一个参数是密码输入