我不能把功劳,因为我从这里偷了这个
using System.Text;
using System.Text.RegularExpressions;
public enum PasswordScore
{
Blank = 0,
VeryWeak = 1,
Weak = 2,
Medium = 3,
Strong = 4,
VeryStrong = 5
}
public class PasswordAdvisor
{
public static PasswordScore CheckStrength(string password)
{
int score = 0;
if (password.Length < 1)
return PasswordScore.Blank;
if (password.Length < 4)
return PasswordScore.VeryWeak;
if (password.Length >= 8)
score++;
if (password.Length >= 12)
score++;
if (Regex.Match(password, @"/\d+/", RegexOptions.ECMAScript).Success)
score++;
if (Regex.Match(password, @"/[a-z]/", RegexOptions.ECMAScript).Success &&
Regex.Match(password, @"/[A-Z]/", RegexOptions.ECMAScript).Success)
score++;
if (Regex.Match(password, @"/.[!,@,#,$,%,^,&,*,?,_,~,-,£,(,)]/", RegexOptions.ECMAScript).Success)
score++;
return (PasswordScore)score;
}
}
请注意使用正则表达式检查大写字符。这似乎是一种不错的方法,因为它检查长度、大小写字符的使用、数字和特殊字符。
** 更新 **
我知道问题现在已经结束,但我可以为 VoidKing 添加更多解释以理解一些概念。
从 CheckStrength 方法返回 PasswordScore,它可以用作代码中下一步操作的条件。
这是如何使用上述代码的未经测试的演示:
String password = "MyDummy_Password"; // Substitute with the user input string
PasswordScore passwordStrengthScore = PasswordAdvisor.CheckStrength(password);
switch (passwordStrengthScore) {
case PasswordScore.Blank:
case PasswordScore.VeryWeak:
case PasswordScore.Weak:
// Show an error message to the user
break;
case PasswordScore.Medium:
case PasswordScore.Strong:
case PasswordScore.VeryStrong:
// Password deemed strong enough, allow user to be added to database etc
break;
}
在这种情况下,枚举被用作将密码强度分类为人类可读组的一种手段。保持代码干净,并让代码中发生的事情一目了然。
关于 Regex 的使用,如果您不熟悉它们的概念以及如何以及何时使用它们,我建议您进行一些研究,因为这些对于检查字符串中的模式在许多不同的场景中可能很有用。或许从这里开始。