C# c语言中密码验证的正则表达式#

C# c语言中密码验证的正则表达式#,c#,regex,C#,Regex,需要关于正则表达式的帮助以在c中验证密码吗# 最小长度为8个字符,最大长度为16个字符 至少一位数字,小写和大写各一位 我累的是: var rule = new Regex("^(?=.{8,16}(?=*[a-z])(?=.*[A-Z])(?=.*[0-9])$"); 但是它不起作用:(你忘了在第一个lookahead中添加结束语。而且你还需要在所有lookahead之后添加*,因为是零宽度断言,它不会匹配任何字符,只会断言匹配是否可能 var rule = new Regex(@"^(?=

需要关于正则表达式的帮助以在c中验证密码吗#

  • 最小长度为8个字符,最大长度为16个字符
  • 至少一位数字,小写和大写各一位
  • 我累的是:

    var rule = new Regex("^(?=.{8,16}(?=*[a-z])(?=.*[A-Z])(?=.*[0-9])$");
    

    但是它不起作用:(

    你忘了在第一个lookahead中添加结束语。而且你还需要在所有lookahead之后添加
    *
    ,因为是零宽度断言,它不会匹配任何字符,只会断言匹配是否可能

    var rule = new Regex(@"^(?=.{8,16}$)(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[0-9]).*$");
    

    我喜欢尽量避免使用正则表达式。我会做一些简单的测试:

     if (password.Length < 8 || password.Length > 16)
         result =  "Invalid Length";
     else if (!password.Any(char.IsDigit))
         result =  "Needs a digit";
     else if (!password.Any(char.IsLower))
         result =  "Needs a lowercase";
     else if (!password.Any(char.IsUpper))
         result =  "Needs an uppercase";
     else
         result = "Good password"; 
    
    if(password.Length<8 | | password.Length>16)
    结果=“无效长度”;
    如果(!password.Any(char.IsDigit))
    result=“需要一个数字”;
    如果(!password.Any(char.IsLower))
    result=“需要小写”;
    如果(!password.Any(char.IsUpper))
    result=“需要大写”;
    其他的
    结果=“密码正确”;
    

    简单、清晰、易读。此外,您还可以向用户提供特定的反馈。这是一种高级方法,可以清晰地返回输出错误消息

    private bool ValidatePassword(字符串密码,out-string错误消息)
    {
    var输入=密码;
    ErrorMessage=string.Empty;
    if(string.IsNullOrWhiteSpace(输入))
    {
    抛出新异常(“密码不应为空”);
    }
    var hasNumber=新的正则表达式(@“[0-9]+”);
    var hasUpperChar=新正则表达式(@“[A-Z]+”);
    var hasmimiMaxChars=新正则表达式(@“{8,15}”);
    var hasLowerChar=新正则表达式(@“[a-z]+”);
    var hasSymbols=new Regex(@“[!@$%^&*()”+=\[{\]};:。/?,-]);
    如果(!hasLowerChar.IsMatch(输入))
    {
    ErrorMessage=“密码应至少包含一个小写字母”;
    返回false;
    }
    如果(!hasUpperChar.IsMatch(输入))为else
    {
    ErrorMessage=“密码应至少包含一个大写字母”;
    返回false;
    }
    如果(!hasMiniMaxChars.IsMatch(输入))为else
    {
    ErrorMessage=“密码不应小于或大于12个字符”;
    返回false;
    }
    如果(!hasNumber.IsMatch(输入))为else
    {
    ErrorMessage=“密码应至少包含一个数值”;
    返回false;
    }
    如果(!hasSymbols.IsMatch(输入))
    {
    ErrorMessage=“密码应至少包含一个特殊大小写字符”;
    返回false;
    }
    其他的
    {
    返回true;
    }
    }
    
    为什么要有一个最大长度。停止。停止。它必须在一个正则表达式中吗?为什么不单独进行每个验证呢?因为这样做更容易,而且可能更可读(因为如果验证规则都是单独的,那么代码中的验证规则会很明显)@Phill:因为存储明文的数据库字段有长度限制?;-)@GregMiller:都德!我包括一个微笑和一切!当然,为了所有其他读者的利益,您是对的,数据库应该只有一个散列。@Lync请注意,正则表达式通常比使用等效字符串方法慢,可能会让不熟悉它们的程序员感到困惑。一般来说,如果你不需要它们,就不要使用它们,但是如果你确实需要它们,就把它们记录下来。。System.ArgumentException:解析“^(?=.{8,16}$)(?=*?[a-z])(?=..[a-z])(?=..[0-9]).*$”-量词{x,y}什么都不跟。我试过了,在定义长度时,{}有可能是问题吗?
    private bool ValidatePassword(string password, out string ErrorMessage)
    {
        var input = password;
        ErrorMessage = string.Empty;
    
        if (string.IsNullOrWhiteSpace(input))
        {
            throw new Exception("Password should not be empty");
        }
    
        var hasNumber = new Regex(@"[0-9]+");
        var hasUpperChar = new Regex(@"[A-Z]+");
        var hasMiniMaxChars = new Regex(@".{8,15}");
        var hasLowerChar = new Regex(@"[a-z]+");
        var hasSymbols = new Regex(@"[!@#$%^&*()_+=\[{\]};:<>|./?,-]");
    
        if (!hasLowerChar.IsMatch(input))
        {
            ErrorMessage = "Password should contain At least one lower case letter";
            return false;
        }
        else if (!hasUpperChar.IsMatch(input))
        {
            ErrorMessage = "Password should contain At least one upper case letter";
            return false;
        }
        else if (!hasMiniMaxChars.IsMatch(input))
        {
            ErrorMessage = "Password should not be less than or greater than 12 characters";
            return false;
        }
        else if (!hasNumber.IsMatch(input))
        {
            ErrorMessage = "Password should contain At least one numeric value";
            return false;
        }
    
        else if (!hasSymbols.IsMatch(input))
        {
            ErrorMessage = "Password should contain At least one special case characters";
            return false;
        }
        else
        {
            return true;
        }
    }