using System; using System.Text.RegularExpressions; namespace Kill.Utils { /// /// 验证工具类 /// 提供常用的数据验证方法 /// public static class ValidationUtils { #region 邮箱验证 /// /// 验证邮箱格式是否有效(正则验证,更严格) /// public static bool IsValidEmailStrict(string email) { if (string.IsNullOrEmpty(email)) return false; // RFC 5322 标准邮箱正则 string pattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"; return Regex.IsMatch(email, pattern); } #endregion #region 密码验证 /// /// 验证简单密码格式(6位数字) /// public static bool IsValidSimplePassword(string password) { if (string.IsNullOrEmpty(password)) return false; // 6位数字 string pattern = @"^\d{6}$"; return Regex.IsMatch(password, pattern); } /// /// 验证复杂密码格式(6-16位,同时包含数字、字母和特殊字符) /// public static bool IsValidComplexPassword(string password) { if (string.IsNullOrEmpty(password)) return false; // 长度6-16位 if (password.Length < 6 || password.Length > 16) return false; // 必须包含数字 bool hasDigit = Regex.IsMatch(password, @"\d"); // 必须包含字母 bool hasLetter = Regex.IsMatch(password, @"[a-zA-Z]"); // 必须包含特殊字符(支持半角和全角符号) bool hasSpecial = Regex.IsMatch(password, @"[!@#$%^&*()_+\-=\[\]{};':""\\|,.<>\/?]|\p{P}"); return hasDigit && hasLetter && hasSpecial; } /// /// 检查是否包含连续或重复的三个及以上数字或字母(大小写不敏感) /// public static bool IsValidNoRepeatOrConsecutive(string password) { for (int i = 0; i <= password.Length - 3; i++) { char c0 = password[i]; char c1 = password[i + 1]; char c2 = password[i + 2]; if (!char.IsLetterOrDigit(c0) || !char.IsLetterOrDigit(c1) || !char.IsLetterOrDigit(c2)) continue; bool isRepeated; if (char.IsLetter(c0)) isRepeated = char.ToLower(c0) == char.ToLower(c1) && char.ToLower(c1) == char.ToLower(c2); else isRepeated = c0 == c1 && c1 == c2; if (isRepeated) return false; if (char.IsDigit(c0) && char.IsDigit(c1) && char.IsDigit(c2)) { if ((c1 - c0 == 1 && c2 - c1 == 1) || (c0 - c1 == 1 && c1 - c2 == 1)) return false; } else if (char.IsLetter(c0)) { char l0 = char.ToLower(c0), l1 = char.ToLower(c1), l2 = char.ToLower(c2); if ((l1 - l0 == 1 && l2 - l1 == 1) || (l0 - l1 == 1 && l1 - l2 == 1)) return false; } } return true; } /// /// 检查密码是否包含邮箱中任意连续两个字符 /// public static bool IsValidNotEmailPart(string password, string email) { if (string.IsNullOrEmpty(email)) return true; string emailName = email.Contains('@') ? email.Split('@')[0] : email; string pwdLower = password.ToLower(); for (int i = 0; i <= emailName.Length - 2; i++) { string pair = emailName.Substring(i, 2).ToLower(); if (pwdLower.Contains(pair)) return false; } return true; } #endregion } }