// 验证工具 export const validationUtils = { // 验证邮箱格式 isEmail: (email: string): boolean => { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return emailRegex.test(email); }, // 验证手机号格式(中国大陆) isPhoneNumber: (phone: string): boolean => { const phoneRegex = /^1[3-9]\d{9}$/; return phoneRegex.test(phone); }, // 验证身份证号格式(中国大陆) isIdCard: (idCard: string): boolean => { const idCardRegex = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; return idCardRegex.test(idCard); }, // 验证密码强度 isStrongPassword: (password: string): boolean => { // 至少8位,包含大小写字母、数字和特殊字符 const strongPasswordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/; return strongPasswordRegex.test(password); }, // 验证是否为空 isEmpty: (value: unknown): boolean => { if (value === null || value === undefined) { return true; } if (typeof value === 'string') { return value.trim() === ''; } if (Array.isArray(value)) { return value.length === 0; } if (typeof value === 'object') { return Object.keys(value as Record).length === 0; } return false; }, // 验证数字范围 isInRange: (value: number, min: number, max: number): boolean => { return value >= min && value <= max; }, // 验证字符串长度 isLengthValid: (str: string, minLength: number, maxLength?: number): boolean => { const length = str.length; if (length < minLength) return false; if (maxLength && length > maxLength) return false; return true; }, // 验证是否为数字 isNumber: (value: unknown): value is number => { return typeof value === 'number' && !isNaN(value); }, // 验证是否为整数 isInteger: (value: unknown): value is number => { return validationUtils.isNumber(value) && Number.isInteger(value); }, // 验证是否为正数 isPositive: (value: number): boolean => { return value > 0; }, // 验证是否为负数 isNegative: (value: number): boolean => { return value < 0; }, // 验证是否为偶数 isEven: (value: number): boolean => { return value % 2 === 0; }, // 验证是否为奇数 isOdd: (value: number): boolean => { return value % 2 !== 0; }, // 验证是否为闰年 isLeapYear: (year: number): boolean => { return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; }, // 验证日期是否有效 isValidDate: (date: Date | string): boolean => { const d = new Date(date); // 检查日期是否有效 if (isNaN(d.getTime())) { return false; } return true; } };