// 该文件中包含客户端需要处理的函数和事件 var showInfo; var arrResult; var mDebug = "0"; var mOperate = ""; var turnPage = new turnPageClass(); var mWFlag = 0; `turnPage`.pageLineNum = 200; var turnPage1 = new turnPageClass(); /** * 宽松校验整数(接受数字或字符串形式的整数) * @param {*} value - 待校验的值 * @returns {boolean} */ function isIntegers(value) { // 1. 直接是数字且为整数 if (Number.isInteger(value)) return true; // 2. 是字符串且内容为整数(允许前后空格,如 ' 42 ') if (typeof value === 'string') { const str = value.trim(); return str !== '' && !isNaN(str) && Number.isInteger(Number(str)); } return false; } /** * 宽松校验 DOUBLE 类型(接受数字或字符串形式的浮点数) * @param {*} value - 待校验的值 * @returns {boolean} */ function isDoubles(value, decimalPlaces = Infinity) { // 1. 直接是数字类型(包括浮点数、Infinity,排除NaN) if (typeof value === 'number' && !isNaN(value)) { // 检查小数位数是否符合要求 const str = value.toString(); if (decimalPlaces === 0) { // 如果是整数,直接校验是否为整数 return Number.isInteger(value); } if (str.includes('.')) { const decimalPart = str.split('.')[1]; return decimalPart.length <= decimalPlaces; } return true; // 没有小数点时,也符合要求 } // 2. 是字符串且内容可解析为有效的非NaN数字 if (typeof value === 'string') { const str = value.trim(); // 允许科学计数法(如 "1.23e4")、正负号、小数点 if (str !== '' && !isNaN(Number(str)) && isFinite(Number(str))) { const parsedValue = Number(str); // 检查小数位数是否符合要求 const strParsed = parsedValue.toString(); if (decimalPlaces === 0) { // 如果是整数,直接校验是否为整数 return Number.isInteger(parsedValue); } if (strParsed.includes('.')) { const decimalPart = strParsed.split('.')[1]; return decimalPart.length <= decimalPlaces; } return true; // 没有小数点时,也符合要求 } } return false; } /** * 校验时间字符串格式是否为 HH:mm:ss 且数值有效 * @param {string} timeStr - 待校验的时间字符串 * @returns {boolean} */ function isValidTimes(timeStr) { // 1. 正则校验基本格式 const timeRegex = /^(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/; if (!timeRegex.test(timeStr)) return false; // 2. 拆分并数值校验(正则已保证范围,此处可省略) const [hours, minutes, seconds] = timeStr.split(':').map(Number); return ( hours >= 0 && hours <= 23 && minutes >= 0 && minutes <= 59 && seconds >= 0 && seconds <= 59 ); } function isBetween(value1, value2, value3) { // 如果 value1 是 null,则不进行任何比较,直接返回 true if (value1 === null) return false; // 如果 value2 是 null,则只检查 value1 是否小于 value3 if (value2 === null){ if(value1 > value3){ return false; } return true; } // 如果 value3 是 null,则只检查 value1 是否大于 value2 if (value3 === null){ if(value1 < value2){ return false; } return true; } if(value1 < value2 || value1 > value3){ return false } // 如果所有值都不是 null,则检查 value1 是否在 value2 和 value3 之间 return true; } function isTime1Later(timeStr1, timeStr2) { const time1 = new Date(`1970-01-01T${timeStr1}`); const time2 = new Date(`1970-01-01T${timeStr2}`); return time1 > time2; } function validateTwoDecimal(input) { // 转换为字符串处理 const str = String(input); // 正则表达式校验: // ^-? - 可选负号开头 // \d+ - 至少一位数字 // (\.\d{1,2})? - 可选的小数点和1-2位小数 // $ - 字符串结束 const regex = /^-?\d+(\.\d{1,2})?$/; // 校验是否是有效数字 if (!regex.test(str)) { return false; } // 额外检查转换为数字后是否有效 const num = parseFloat(str); return !isNaN(num); } function validatePhoneNumber(input) { // 首先检查是否包含汉字、字母等非允许字符 if (/[^\d-]/.test(input)) { return false; } // 去除所有空格和特殊字符(只保留数字和-) const cleanedInput = input.replace(/[^\d-]/g, ''); // 手机号正则(中国大陆手机号) const mobileRegex = /^1[3-9]\d{9}$/; // 修改后的电话号码正则(放宽长度限制) // 三位或四位区号(如010或0371)后面可以跟7或8位号码 const telRegex = /^(0\d{2,3}-?)([1-9]\d{6,8})$/; // 先检查手机号 if (mobileRegex.test(cleanedInput)) { return true; } // 检查固定电话格式 const telMatch = telRegex.exec(cleanedInput); if (telMatch) { const areaCode = telMatch[1].replace(/-/, ''); const number = telMatch[2]; // 验证区号和号码长度的基本合理性(可选) // 这里不再强制限制特定长度组合 // 只要总长度在合理范围内即可 const totalLength = areaCode.length + number.length; return totalLength >= 10 && totalLength <= 12; } return false; } function validatePhone(input) { // 首先检查是否包含汉字、字母等非允许字符 if (/[\D]/.test(input)) { return false; } // 去除所有空格和特殊字符(只保留数字和-) const cleanedInput = input.replace(/[\D]/g, ''); // 手机号正则(中国大陆手机号) const mobileRegex = /^1[3-9]\d{9}$/; // 先检查手机号 if (mobileRegex.test(cleanedInput)) { return true; } return false; } function validateCertificateDateByidCard(idCard, startDate, endDate) { // 首先从身份证号获取生日 function getBirthdayFromIdCard(idCard) { if (!idCard || (idCard.length !== 15 && idCard.length !== 18)) { alert('身份证号格式不正确'); throw new Error('身份证号格式不正确'); } let year, month, day; if (idCard.length === 15) { year = '19' + idCard.substr(6, 2); month = idCard.substr(8, 2); day = idCard.substr(10, 2); } else { year = idCard.substr(6, 4); month = idCard.substr(10, 2); day = idCard.substr(12, 2); } // 返回YYYY-MM-DD格式的生日 return `${year}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`; } // 获取生日 let birthday; try { birthday = getBirthdayFromIdCard(idCard); } catch (e) { return false; } // 计算年龄 const birthDate = new Date(birthday); //年龄的计算是要按照证件起期-出生日期来算年龄 // const today = new Date(); const today = new Date(startDate); let age = today.getFullYear() - birthDate.getFullYear(); const monthDiff = today.getMonth() - birthDate.getMonth(); if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) { age--; } // 解析起止日期 const startYear = new Date(startDate).getFullYear(); const endYear = new Date(endDate).getFullYear(); const yearDiff = endYear - startYear; // 根据年龄校验规则 if (age < 16) { return yearDiff === 5; } else if (age >= 16 && age <= 25) { return yearDiff === 10; } else if (age >= 26 && age <= 45) { return yearDiff === 20; } else { return false; // 年龄不在校验范围内 } } function getBirthdayFromIdCard(idCard) { // 校验身份证号基本格式 if (!idCard || (idCard.length !== 15 && idCard.length !== 18)) { alert('身份证号格式不正确'); throw new Error('身份证号格式不正确'); } let year, month, day; // 处理15位身份证 if (idCard.length === 15) { year = 1900 + parseInt(idCard.substr(6, 2), 10); // 15位身份证:19 + YY month = parseInt(idCard.substr(8, 2), 10) - 1; // 月份转换为0-11 day = parseInt(idCard.substr(10, 2), 10); } // 处理18位身份证 else { year = parseInt(idCard.substr(6, 4), 10); // 18位身份证:完整年份 month = parseInt(idCard.substr(10, 2), 10) - 1; // 月份转换为0-11 day = parseInt(idCard.substr(12, 2), 10); } // 创建日期对象(避免字符串解析的浏览器兼容性问题) const birthDate = new Date(year, month, day); // 验证日期有效性 if ( isNaN(birthDate.getTime()) || birthDate.getFullYear() !== year || birthDate.getMonth() !== month || birthDate.getDate() !== day ) { alert('身份证中包含无效的日期'); throw new Error('身份证中包含无效的日期'); } return birthDate; }