检查字符串是否是有效密码

时间:2015-10-16 19:23:08

标签: c# string passwords

这是我的作业,编辑了它:

某些网站对密码规定了某些规则。编写一个函数来检查字符串是否是有效密码。假设密码规则如下:

  • 密码必须至少包含八个字符。
  • 密码仅包含字母和数字。
  • 密码必须至少包含两位数字。

编写一个C#程序,提示用户输入密码,如果遵循规则则显示有效密码,否则显示无效密码

这就是我现在所做的:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Please enter a Password: ");
        String password = Console.ReadLine();

        if (isValid(password))
        {
            Console.WriteLine("Valid Password");
        }
        else
        {
            Console.WriteLine("Invalid Password");
        }
    }

    public static bool isValid(String password)
    {
        if (password.Length < 8)
        {
            return false;
        }
        else
        {
            char c;
            int count = 1;
            for (int i = 0; i < password.Length - 1; i++)
            {
                c = password[i];
                if (!Char.IsLetterOrDigit(c))
                {
                    return false;
                }
                else if (Char.IsDigit(c))
                {
                    count++;
                    if (count < 2)
                    {
                        return false;
                    }
                }
            }
        }
        return true;
    }
}

但是有一个问题我找不到

1 个答案:

答案 0 :(得分:0)

我认为这更像是你在寻找的东西:

    static void Main(string[] args)
    {
        Console.WriteLine("Please enter a Password: ");
        var password = Console.ReadLine();
        Console.WriteLine(IsValid(password) ? "Valid Password" : "Invalid Password");
        Console.ReadLine();
    }

    public static bool IsValid(string password)
    {
        var charactersInPassword = password.ToCharArray();
        if (charactersInPassword.Length < 8) return false;
        if (charactersInPassword.Any(character => !char.IsLetterOrDigit(character)))
            return false;

        var numberOfDigits = charactersInPassword.Count(char.IsDigit);
        return numberOfDigits >= 2;
    }

如果您对编程感兴趣,我建议您自己编写一个好的代码分析工具。我不知道任何开发人员没有Resharper / Productivity电动工具等等。它将帮助您编写更好的代码,减少冗余。对字符串等使用内置的.net功能(如ToCharArray)也更好。你可能已经被教过使用:

for (int i = 0; i < password.Length - 1; i++)

写一些可以写得更清晰,更容易的东西是一种漫长而烦人的方式,例如:

foreach (var characterInPassword in password.ToCharArray())

另外,我知道你不是用Python编写的,但值得一读:https://www.python.org/dev/peps/pep-0020/。这是一个快速阅读,它可以让您在编写代码时处于正确的状态。