window.ValidatorRules = { // 非空验证 'notNull': { validate: (value) => { return value !== null && value !== undefined && value !== ''; }, message: '{field}不能为空' }, // 邮箱验证 'email': { validate: (value) => { if (!value) return true; // 如果为空则跳过验证 return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value); }, message: '{field}格式不正确' }, // 数字验证 'number': { validate: (value) => { if (!value) return true; return !isNaN(value) && typeof Number(value) === 'number'; }, message: '{field}必须是数字' }, // 最小长度 'minLength': { validate: (value, min) => { if (!value) return true; return String(value).length >= min; }, message: '{field}长度不能小于{min}个字符' }, // 最大长度 'maxLength': { validate: (value, max) => { if (!value) return true; return String(value).length <= max; }, message: '{field}长度不能超过{max}个字符' }, // 证件号验证 'idCard': { validate: function(value, options) { // 如果有关联字段,按关联字段的值选择验证规则 if (options.relField) { const typeElement = document.querySelector(`[name="${options.relField}"]`); const type = typeElement?.value; // 内置规则映射 const rules = { '1': this.validateIdCard, // 居民身份证 '6': this.validateHkIdCard, // 香港特区护照或身份证 '7': this.validateMacauIdCard, // 澳门特区护照或身份证 '8': this.validateTaiwanPass, // 台湾居民来往大陆通行证 '10': this.validateForeignerCard // 外国人永久居留证 }; // 如果是空值或"请选择",则跳过验证 if (!type || type === '') return true; const validator = rules[type]; if (!validator) return true; return validator(value); } // 如果没有关联字段,默认使用身份证验证 return this.validateIdCard(value); }, message: '{field}格式不正确', // 居民身份证:18位数字,最后一位可能是X validateIdCard(value) { if (!value) return true; return /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dX]$/.test(value); }, // 香港特区护照或身份证:字母开头+6位数字+(数字或A) validateHkIdCard(value) { if (!value) return true; // 支持两种格式: // 1. 香港身份证:1-2个字母 + 6位数字 + (数字或A) // 2. 香港特区护照:H + 8位数字 return /^[A-Z]{1,2}[0-9]{6}\([0-9A]\)$/.test(value) || /^H[0-9]{8}$/.test(value); }, // 澳门特区护照或身份证:1/5/7 + 6位数字 + (校验位) validateMacauIdCard(value) { if (!value) return true; // 支持两种格式: // 1. 澳门身份证:1/5/7 + 6位数字 + (数字) // 2. 澳门特区护照:MA + 8位数字 return /^[157][0-9]{6}\([0-9]\)$/.test(value) || /^MA[0-9]{8}$/.test(value); }, // 台湾居民来往大陆通行证:8位数字 validateTaiwanPass(value) { if (!value) return true; return /^[0-9]{8}$/.test(value); }, validateForeignerCard(value) { if (!value) return true; return /^[A-Z]{3}\d{6}$/.test(value); } }, 'custom': { validate: function(value, options) { // 如果没有自定义验证函数,直接返回 true if (!options.validate) return true; // 获取关联字段的值(如果有) let relValue; if (options.relField) { const relElement = document.querySelector(`[name="${options.relField}"]`); relValue = relElement?.value; } // 执行自定义验证 const result = options.validate(value, relValue); // 如果返回的是对象,设置自定义错误消息 if (result && typeof result === 'object') { this.message = result.message; return result.valid; } // 如果返回的是 boolean,使用默认错误消息 return result; }, message: '{field}验证失败' } };