对于家庭作业,我必须创建一个程序来扫描用户输入的“密码”,并显示该密码的强弱。
我的条件之一是检查密码字符串是否连续包含数字,例如mypass123。
我已经尝试过了,但是它不接受字母:
int DigitCounter = 0;
var DigitRow = string.Join("", Password.OrderBy(i => int.Parse(i.ToString())));
for(int i = 0; i < Password.Length; ++i)
{
if(Password == DigitRow)
{
DigitCounter++;
}
}
答案 0 :(得分:1)
使用正则表达式尝试这种方法:
foreach (var numberGroup in new Regex("[0-9]{2,}").Matches(Password))
{
if (numberGroup.Value.OrderBy(c => c).SequenceEquals(numberGroup.Value))
{
// numbers in ascending order!
}
}
[0-9]{2,}
将匹配包含两个或多个彼此相邻的数字的输入字符串的每个部分。然后,我们尝试按数字对输入字符串进行排序,查看字符串是否已更改-如果它没有按顺序包含数字
答案 1 :(得分:0)
字符串中的每个字符都可以转换为数字,具体取决于编码。
在ASCII中,A
是65,B
是66,依此类推。可以通过将它们强制转换为int((int) Password[0]
)并进行比较来获得它们。
Password = "12345";
var array = Password.Select(i => (int) i).ToList();
// array: { 49, 50, 51, 52, 53 }
// Use your way to check if they are in a row!
答案 2 :(得分:0)
您可以尝试使用以下功能
public static bool IsStrong(string pass)
{
bool isStrong = false;
int num = 0;
var stringArr = pass.ToCharArray();
var numsArr = new List<int>();
foreach (var a in stringArr)
{
if (int.TryParse(a.ToString(), out num))
{
numsArr.Add(num);
}
}
if (numsArr.Any())
{
for (int i = 1; i < numsArr.Count(); i++)
{
if(numsArr[i] - numsArr[i-1] != 1)
{
isStrong = true;
}
}
}
return isStrong;
}