您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。
摘要:手撸基于ASCII码表的校验密码方法。
附赠正则表达式
密码规则:包含 数字,大小写,特殊字符^%&',;=?$',长度8~20位。
群聊
群友A问:有没有方法可以判断字符串里面带不带标点符号啊?
群友B问:需求是什么?
群友A说:想要密码校验,网上大部分都是正则。
群友A说:密码规则是包含大小写和数字、特殊符号,还有Length>=8。
我直接在LINQPad手撸基于ASCII码表的校验密码方法发到群里。
该实现逻辑,几乎任何编程语言都通用,可借鉴。
工具类
public static class Utils
{
public static bool ValidPassword(string password, int minLength = 8, int maxLength = 20)
{
if (string.IsNullOrEmpty(password) || password.Length < minLength || password.Length > maxLength)
{
return false;
}
bool hasLower = false;
bool hasUpper = false;
bool hasNumber = false;
bool hasSymbol = false;
foreach (ushort item in password)
{
if (item < 33 || item > 126)
{
return false;
}
if (item >= 48 && item <= 57)
{
hasNumber = true;
continue;
}
if (item >= 65 && item <= 90)
{
hasUpper = true;
continue;
}
if (item >= 97 && item <= 122)
{
hasLower = true;
continue;
}
hasSymbol = true;
}
return hasLower && hasUpper && hasNumber && hasSymbol;
}
}
测试代码
class Program
{
static void Main(params string[] args)
{
TestValidPassword();
}
static void TestValidPassword()
{
Console.WriteLine(Utils.ValidPassword("Abcd1234.!"));
Console.WriteLine(Utils.ValidPassword("abcd1234."));
Console.WriteLine(Utils.ValidPassword("abcd12345"));
Console.WriteLine(Utils.ValidPassword("abced!.-/*"));
Console.WriteLine(Utils.ValidPassword("Abcd1234我"));
}
}
附赠正则表达式
密码规则:包含 数字,大小写,特殊字符^%&',;=?$\",长度8~20位。
其中x22是双引号"的转义。
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^%&',;=?$\x22])[A-Za-z0-9^%&',;=?$\x22]{8,20}$
ASCII码表
ASCII 控制字符 (字符编码: 0-31)
在ASCII码表中,前32个字符是不能用于打印控制的编码,而是用于控制像打印机一样的外围设备。
