用于复杂密码验证的正则表达式

本文关键字:正则表达式 验证 密码 复杂 用于 | 更新日期: 2023-09-27 18:16:59

我看了看周围的stackoverflow等,但还没有找到一个很好的答案这个.. regex支持编写这样的规则吗?如果有的话,是否有正则表达式专家可以帮助我写这篇文章,我是一个正则表达式的新手,而且时间紧迫…

我知道我可以用c#中的手动函数使用c# char, number方法来做到这一点,但如果可以的话,我想使用正则表达式。

要求:

  • 至少8个字符
      <
    • 2字母/gh><
    • 2位数/gh>
    • 1大写
    • 1小写
    • 1符号

用于复杂密码验证的正则表达式

你可以使用这个正则表达式

^(?=(.*'d){2})(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z'd]).{8,}$
    ---------  --------------------- --------------- -----
        |               |                    |          |->match 8 or more characters
        |               |                    |->match further only if theres anything except letter or digit
        |               |->match further only if there is an upper-lower case letter
        |
        |->match further only if there are two digits anywhere
演示

您最好为包含所有这些检查的密码编写一个简单的验证例程。

正则表达式似乎不是解决这个特殊问题的最佳(或最可扩展的)解决方案。

if(password.Length < 8)
  return false;
var letters = 0;
var digits = 0;
var uppers = 0;
var lowers = 0;
var symbols = 0;
foreach(var ch in password)
{
   if (char.IsLetter(ch)) letters++;
   if (char.IsDigit(ch)) digits++;
   ....
} 
if(letters < 2) return false;
...

我建议采用Oded的回答方式,但我认为在这种情况下,LINQ是一种更具可读性和显式的验证机制。

string p = "psW%Rd32";
return p.Length >= 8 &&
    p.Count(c => char.IsDigit(c)) >= 2 &&
    p.Count(c => char.IsUpper(c)) >= 1 &&
    p.Count(c => char.IsLower(c)) >= 1) ...

你可以试试这个方法。

 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,8}");
    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 8 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;
    }
}