可能重复:
Strong password regex
Need RegEx for password strength?
我只是想知道在某些条件下搜索字符串的最佳方法是什么(具体的密码强度)可以实现。
到目前为止,我有一个简单的说法:
if(password.Length <= 7)
{
errorMessage = "Your password must be at least 8 characters.";
}
我希望能够检查大写字母,但我不确定方法或程序是什么。我试过谷歌搜索,搜索网站:http://msdn.microsoft.com,搜索我的C#书的索引(C#编程3E,芭芭拉道尔),但我似乎找不到。
我知道我可以尝试这个......:
foreach(char c in password)
{
if(c!='A' || c!='B' || c!='C' || c!='D' ..... || c!='Z')
{
errorMessage = "Your password must contain at least one capital letter";
}
}
...但是这将是非常草率的,并且必须加倍才能检查至少一个小写字母。我确信有更好的方法可以做到这一点,或者至少是上面显示的方法的简写。
另外,我可能会决定检查特殊字符的密码(在上面的示例中似乎比使用大写和小写字母更容易做到,所以我可以将它用于特殊字符,如果我决定使它们成为必要的话) 。如果有一种简单(或适当)的方式,我也很乐意拥有这些知识。
无论如何,非常感谢你们给予的任何帮助。
答案 0 :(得分:56)
我无法理解,因为我从here
偷走了这个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;
}
在这种情况下,使用枚举作为将密码强度分类为人类可读组的方法。保持代码干净,并使代码中的内容变得明显。
关于正则表达式的使用,如果你不熟悉它们的概念以及如何以及何时使用它们,我建议做一些研究,因为这些在许多不同的场景中可用于检查字符串中的模式。也许开始here。