C# 不使用正则表达式和/或列表/规则进行密码检查

C# 不使用正则表达式和/或列表/规则进行密码检查,c#,for-loop,if-statement,boolean,C#,For Loop,If Statement,Boolean,我已经搜索了论坛和整个谷歌,还没有找到我的问题的答案。我想用if/if-else语句创建一个简单的程序,其中有一个for循环。这在不使用正则表达式或列表/规则的情况下是否可行 我希望它符合以下要求: 长度8。 至少一个数字。 至少有一个大写字母。 至少有一个小写字母 这就是我到目前为止想到的,我不明白为什么它不起作用?我之所以使用if语句而不使用else if,是因为我希望在不满足条件时打印所有错误消息。为愚蠢的问题道歉,我是c#的新手 static void Main(字符串[]args) {

我已经搜索了论坛和整个谷歌,还没有找到我的问题的答案。我想用if/if-else语句创建一个简单的程序,其中有一个for循环。这在不使用正则表达式或列表/规则的情况下是否可行

我希望它符合以下要求:

长度8。 至少一个数字。 至少有一个大写字母。 至少有一个小写字母

这就是我到目前为止想到的,我不明白为什么它不起作用?我之所以使用if语句而不使用else if,是因为我希望在不满足条件时打印所有错误消息。为愚蠢的问题道歉,我是c#的新手

static void Main(字符串[]args)
{
var password=Console.ReadLine();
对于(变量i=0;i
您的循环每次都检查一个字符。这意味着只有一个bool将返回true。您应该在循环之外进行检查,如:

bool hasDigit = false;
bool hasUpperCase = false;
bool hasLowerCase = false;
for (var i = 0; i < password.Length; ++i)
{
    hasDigit = hasDigit || char.IsDigit(password[i]);
    hasUpperCase = hasUpperCase || char.IsUpper(password[i]);
    hasLowerCase = hasLowerCase || char.IsLower(password[i]);   
}
if(password.Length < 8)
{
    Console.WriteLine("Password length should be 8 symbols or more.");
}
if(!hasUpperCase)
{
    Console.WriteLine("Password should contain at least one uppercase letter.");
}
if(!hasLowerCase)
{
    Console.WriteLine("Password should contain at least one lowercase letter.");

}
if(!hasDigit)
{
    Console.WriteLine("Password should contain at least one digit.");
}
bool hasDigit=false;
bool hassuppercase=false;
bool hasLowerCase=false;
对于(变量i=0;i
另一个选项是使用linq,因此不需要for循环,如下所示:

if(password.Length < 8)
{
    Console.WriteLine("Password length should be 8 symbols or more.");
}
if(!password.Any(x=>char.IsUpper(x)))
{
    Console.WriteLine("Password should contain at least one uppercase letter.");
}
if(!password.Any(x=>char.IsLower(x)))
{
    Console.WriteLine("Password should contain at least one lowercase letter.");        
}
if(!password.Any(x=>char.IsDigit(x)))
{
    Console.WriteLine("Password should contain at least one digit.");
}
static void Main(string[] args)
{
    var password = Console.ReadLine();
    bool passwordCorrect = false;

    while (!passwordCorrect)
    {
        bool hasDigit = false;
        bool hasUpperCase = false;
        bool hasLowerCase = false;

        for (var i = 0; i < password.Length; ++i)
        {
            if (char.IsDigit(password[i]))
                hasDigit = true;

            if (char.IsUpper(password[i]))
                hasUpperCase = true;

            if (char.IsLower(password[i]))
                hasLowerCase = true;
        }

        if (password.Length >= 8 
            && hasUpperCase 
            && hasLowerCase 
            && hasDigit)
        {
            passwordCorrect = true;
        }
        else
        {
            if(password.Length < 8)
                Console.WriteLine("Password length should be 8 symbols or more.");

            if(!hasUpperCase)
                Console.WriteLine("Password should contain at least one uppercase letter.");

            if(!hasLowerCase)
                Console.WriteLine("Password should contain at least one lowercase letter.");

            if(!hasDigit)
                Console.WriteLine("Password should contain at least one digit.");

            password = Console.ReadLine();
        }
    }

    Console.WriteLine("Your password is properly set!");
    Console.ReadLine();
}
if(password.Length<8)
{
Console.WriteLine(“密码长度应为8个或更多符号”);
}
如果(!password.Any(x=>char.IsUpper(x)))
{
WriteLine(“密码应至少包含一个大写字母”);
}
如果(!password.Any(x=>char.IsLower(x)))
{
WriteLine(“密码应至少包含一个小写字母”);
}
如果(!password.Any(x=>char.IsDigit(x)))
{
Console.WriteLine(“密码应至少包含一位数字”);
}

您的循环每次都检查一个字符。这意味着只有一个bool将返回true。您应该在循环之外进行检查,如:

bool hasDigit = false;
bool hasUpperCase = false;
bool hasLowerCase = false;
for (var i = 0; i < password.Length; ++i)
{
    hasDigit = hasDigit || char.IsDigit(password[i]);
    hasUpperCase = hasUpperCase || char.IsUpper(password[i]);
    hasLowerCase = hasLowerCase || char.IsLower(password[i]);   
}
if(password.Length < 8)
{
    Console.WriteLine("Password length should be 8 symbols or more.");
}
if(!hasUpperCase)
{
    Console.WriteLine("Password should contain at least one uppercase letter.");
}
if(!hasLowerCase)
{
    Console.WriteLine("Password should contain at least one lowercase letter.");

}
if(!hasDigit)
{
    Console.WriteLine("Password should contain at least one digit.");
}
bool hasDigit=false;
bool hassuppercase=false;
bool hasLowerCase=false;
对于(变量i=0;i
另一个选项是使用linq,因此不需要for循环,如下所示:

if(password.Length < 8)
{
    Console.WriteLine("Password length should be 8 symbols or more.");
}
if(!password.Any(x=>char.IsUpper(x)))
{
    Console.WriteLine("Password should contain at least one uppercase letter.");
}
if(!password.Any(x=>char.IsLower(x)))
{
    Console.WriteLine("Password should contain at least one lowercase letter.");        
}
if(!password.Any(x=>char.IsDigit(x)))
{
    Console.WriteLine("Password should contain at least one digit.");
}
static void Main(string[] args)
{
    var password = Console.ReadLine();
    bool passwordCorrect = false;

    while (!passwordCorrect)
    {
        bool hasDigit = false;
        bool hasUpperCase = false;
        bool hasLowerCase = false;

        for (var i = 0; i < password.Length; ++i)
        {
            if (char.IsDigit(password[i]))
                hasDigit = true;

            if (char.IsUpper(password[i]))
                hasUpperCase = true;

            if (char.IsLower(password[i]))
                hasLowerCase = true;
        }

        if (password.Length >= 8 
            && hasUpperCase 
            && hasLowerCase 
            && hasDigit)
        {
            passwordCorrect = true;
        }
        else
        {
            if(password.Length < 8)
                Console.WriteLine("Password length should be 8 symbols or more.");

            if(!hasUpperCase)
                Console.WriteLine("Password should contain at least one uppercase letter.");

            if(!hasLowerCase)
                Console.WriteLine("Password should contain at least one lowercase letter.");

            if(!hasDigit)
                Console.WriteLine("Password should contain at least one digit.");

            password = Console.ReadLine();
        }
    }

    Console.WriteLine("Your password is properly set!");
    Console.ReadLine();
}
if(password.Length<8)
{
Console.WriteLine(“密码长度应为8个或更多符号”);
}
如果(!password.Any(x=>char.IsUpper(x)))
{
WriteLine(“密码应至少包含一个大写字母”);
}
如果(!password.Any(x=>char.IsLower(x)))
{
WriteLine(“密码应至少包含一个小写字母”);
}
如果(!password.Any(x=>char.IsDigit(x)))
{
Console.WriteLine(“密码应至少包含一位数字”);
}

您的问题是if语句试图检查密码是否包含循环每次迭代的上/下/位,因此实际上一次只检查一个字母

如果密码确实正确,您也没有任何东西会打破循环,因此每次密码都会要求您重新输入

认为你在追求这样的东西:

if(password.Length < 8)
{
    Console.WriteLine("Password length should be 8 symbols or more.");
}
if(!password.Any(x=>char.IsUpper(x)))
{
    Console.WriteLine("Password should contain at least one uppercase letter.");
}
if(!password.Any(x=>char.IsLower(x)))
{
    Console.WriteLine("Password should contain at least one lowercase letter.");        
}
if(!password.Any(x=>char.IsDigit(x)))
{
    Console.WriteLine("Password should contain at least one digit.");
}
static void Main(string[] args)
{
    var password = Console.ReadLine();
    bool passwordCorrect = false;

    while (!passwordCorrect)
    {
        bool hasDigit = false;
        bool hasUpperCase = false;
        bool hasLowerCase = false;

        for (var i = 0; i < password.Length; ++i)
        {
            if (char.IsDigit(password[i]))
                hasDigit = true;

            if (char.IsUpper(password[i]))
                hasUpperCase = true;

            if (char.IsLower(password[i]))
                hasLowerCase = true;
        }

        if (password.Length >= 8 
            && hasUpperCase 
            && hasLowerCase 
            && hasDigit)
        {
            passwordCorrect = true;
        }
        else
        {
            if(password.Length < 8)
                Console.WriteLine("Password length should be 8 symbols or more.");

            if(!hasUpperCase)
                Console.WriteLine("Password should contain at least one uppercase letter.");

            if(!hasLowerCase)
                Console.WriteLine("Password should contain at least one lowercase letter.");

            if(!hasDigit)
                Console.WriteLine("Password should contain at least one digit.");

            password = Console.ReadLine();
        }
    }

    Console.WriteLine("Your password is properly set!");
    Console.ReadLine();
}
static void Main(字符串[]args)
{
var password=Console.ReadLine();
bool passwordCorrect=false;
而(!passwordCorrect)
{
bool hasDigit=false;
bool hassuppercase=false;
bool hasLowerCase=false;
对于(变量i=0;i=8
&&大写字母
&&有小写字母
&&(数字)
{
passwordCorrect=true;
}
其他的
{
如果(密码长度<8)
Console.WriteLine(“密码长度应为8个或更多符号”);
if(!hassuppercase)
WriteLine(“密码应至少包含一个大写字母”);
如果(!hasLowerCase)
Console.WriteLine(“密码应至少包含一个小写字母le