/* * 校验函数 * @author likai * @version 2.0 */ /* * calendar标签check函数 * 返回ture 正常日期 false 异常日期 */ function checkDate(name){ var dateFormat = ["yyyy-MM-dd", "yyyy-MM", "yyyy/MM/dd", "yyyy/MM", "yyyy.MM.dd", "yyyy.MM", "yyyyMMdd", "yyyyMM", "yyyy"]; // 时间格式 对应正则表达式 需要补零 var regZeroFormat = [ /(([1-2][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([12][0-9])(0[48]|[2468][048]|[13579][26])|((1[26]|2[048])00))-02-29)$/, /([1-2][0-9]{3})-([0][1-9]|[1][0-2])$/, /(([1-2][0-9]{3})\/(((0[13578]|1[02])\/(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)\/(0[1-9]|[12][0-9]|30))|(02\/(0[1-9]|[1][0-9]|2[0-8]))))|((([12][0-9])(0[48]|[2468][048]|[13579][26])|((1[26]|2[048])00))\/02\/29)$/, /([1-2][0-9]{3})\/([0][1-9]|[1][0-2])$/, /(([1-2][0-9]{3})\.(((0[13578]|1[02])\.(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)\.(0[1-9]|[12][0-9]|30))|(02\.(0[1-9]|[1][0-9]|2[0-8]))))|((([12][0-9])(0[48]|[2468][048]|[13579][26])|((1[26]|2[048])00))\.02\.29)$/, /([1-2][0-9]{3})\.([0][1-9]|[1][0-2])$/, /(([1-2][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))|((([12][0-9])(0[48]|[2468][048]|[13579][26])|((1[26]|2[048])00))0229)$/, /([1-2][0-9]{3})([0][1-9]|[1][0-2])$/, /[1-2][0-9]{3}$/]; // 时间格式 对应正则表达式 无需补零 var regFormat = [ /(([1-2][0-9]{3})-(((0?[13578]|1[02])-(0?[1-9]|[12][0-9]|3[01]))|((0?[469]|11)-(0?[1-9]|[12][0-9]|30))|(0?2-(0?[1-9]|[1][0-9]|2[0-8]))))|((([12][0-9])(0[48]|[2468][048]|[13579][26])|((1[26]|2[048])00))-0?2-29)$/, /([1-2][0-9]{3})-([0]?[1-9]|[1][0-2])$/, /(([1-2][0-9]{3})\/(((0?[13578]|1[02])\/(0?[1-9]|[12][0-9]|3[01]))|((0?[469]|11)\/(0?[1-9]|[12][0-9]|30))|(0?2\/(0?[1-9]|[1][0-9]|2[0-8]))))|((([12][0-9])(0[48]|[2468][048]|[13579][26])|((1[26]|2[048])00))\/0?2\/29)$/, /([1-2][0-9]{3})\/([0]?[1-9]|[1][0-2])$/, /(([1-2][0-9]{3})\.(((0?[13578]|1[02])\.(0?[1-9]|[12][0-9]|3[01]))|((0?[469]|11)\.(0?[1-9]|[12][0-9]|30))|(0?2\.(0?[1-9]|[1][0-9]|2[0-8]))))|((([12][0-9])(0[48]|[2468][048]|[13579][26])|((1[26]|2[048])00))\.0?2\.29)$/, /([1-2][0-9]{3})\.([0]?[1-9]|[1][0-2])$/, /(([1-2][0-9]{3})(((0?[13578]|1[02])(0?[1-9]|[12][0-9]|3[01]))|((0?[469]|11)(0?[1-9]|[12][0-9]|30))|(0?2(0?[1-9]|[1][0-9]|2[0-8]))))|((([12][0-9])(0[48]|[2468][048]|[13579][26])|((1[26]|2[048])00))0?229)$/, /([1-2][0-9]{3})([0]?[1-9]|[1][0-2])$/, /[1-2][0-9]{3}$/]; var nodes; var index; var node; var dateType; var zero; var reg = ""; var flag; if( name == undefined){ nodes = document.getElementsByName("zscqglCalendar"); } else { nodes = document.getElementsByName(name); } for (var temp = 0; temp < nodes.length; temp++) { node = nodes[temp]; if (node.value != null && node.value != "") { dateType = node.getAttribute("dateType"); zero = node.getAttribute("zero"); // 记录index for (index = 0; index < dateFormat.length; index++) { if (dateType == dateFormat[index]) { break; } } if (zero == "true") { reg = regZeroFormat[index]; } else if (zero == "false") { reg = regFormat[index]; } if (!(reg == undefined || reg == "" || !reg.test(node.value))) { if(reg.exec(node.value)[0].length == node.value.length){ flag = true; continue } } } flag = false; break; } return flag; } /* * Numeric标签check函数 * 返回ture 正常数字 false 异常数字 * 不校验空 若input[check=zscqglNumeric].size() = 0亦不作校验 * 返回第一个校验错误的input对象 */ function checkNumeric(name){ var nodes; var node; var length; var positive; var numericLength; var integerLength; var reg = ""; var flag = true; if( name === undefined){ nodes = $("input[check=zscqglNumeric]"); } else { nodes = $("input[check="+name+"]"); } for (var temp = 0; temp < nodes.length; temp++) { node = nodes[temp]; if (node.value != null && node.value != "") { flag = node; length = node.getAttribute("length").split(","); positive = node.getAttribute("positive"); integerLength = length[0]-1; numericLength = length[1]; node.value = node.value.replace(/^([+-]?)(0+)(\d)/, "$1$3"); if (positive == "negative" || positive == "positive") { reg = "(([1-9]"; } else if (positive == "Non-negative" || positive == "Non-positive") { reg = "((0|[1-9]"; } else { flag = node; break; } if (numericLength == 0) { reg += "[0-9]{0," + integerLength + "}))"; } else { reg += "[0-9]{0," + integerLength + "}|0)"; reg += "(\\.[0-9]{1," + numericLength + "})?)"; } if (positive == "positive" || positive == "Non-negative") { reg = "\\+?" + reg; } else if (positive == "negative") { reg = "-" + reg; } else if (positive == "Non-positive") { reg = "0|-" + reg; } reg = new RegExp(reg); if (!(reg == undefined || reg == "" || !reg.test(node.value))) { if(reg.exec(node.value)[0].length == node.value.length){ flag = true; continue; } } } else { continue; } if(flag != false) break; } return flag; } /* * Input标签check函数 * 返回ture 正常数字 false 异常数字 */ function checkInput(name){ var tagType = ["mail","zipcode", "halfangle", "fullangle", "www", "phone", "mobile", "IDcard", "input"]; var tagFormat = [ /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/, /[1-9][0-9]{5}/, /^[\x00-\xff]+/, /[^\x00-\xff]+/, /[a-zA-z]+\:\/\/[\S]*/, /((((00[1-9][0-9]\-0[1-9])(\d{2}|\d{1}))|0[1-9](\d{2}|\d{1}))\-)?(\d{8}|\d{7})/, /1\d{10}/, ]; var nodes; var index; var node; var type; var reg = ""; var flag = true; if( name == undefined){ nodes = $("input[check=zscqglInput]"); } else { nodes = $("input[check="+name+"]"); } for (var temp = 0; temp < nodes.length; temp++) { node = nodes[temp]; if (node.value != null && node.value != "") { flag = node; type = node.getAttribute("type"); // 记录index for (index = 0; index < tagType.length; index++) { if (type == tagType[index]) { break; } } if(index == 8){ // 普通输入 无需验证 flag = true; continue; } else if(index == 7){ // 校验身份证 if(isIdCardNo(node.value, node)){ flag = true; continue; } else { break; } } else { reg = tagFormat[index]; if (!(reg == undefined || reg == "" || !reg.test(node.value))) { if(reg.exec(node.value)[0].length == node.value.length){ flag = true; continue; } } } } else { continue; } if(flag != false) break; } return flag; } /* * 验证身份证 */ function isIdCardNo(num, object) { var datereg = /(([1-2][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))|((([12][0-9])(0[48]|[2468][048]|[13579][26])|((1[26]|2[048])00))0229)$/; var factorArr = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1); var error; var varArray = new Array(); var intValue; var lngProduct = 0; var intCheckDigit; var intStrLen = num.length; var idNumber = num; // initialize if ((intStrLen != 15) && (intStrLen != 18)) { //error = "输入身份证号码长度不对!"; //alert(error); return false; } // convert date6 to data 8 if(intStrLen == 15){ idNumber = idNumber.substring(0, 6) + "19" + idNumber.substring(6, 15); } // check and set value for(var i=0; i<18; i++) { varArray[i] = idNumber.charAt(i); if ((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) { //error = "错误的身份证号码!."; //alert(error); return false; } else if (i < 17) { varArray[i] = varArray[i]*factorArr[i]; } } if (intStrLen == 18) { //check date var date8 = idNumber.substring(6,14); var reg = datereg; var result = reg.exec(date8); if (result == null || result[0].length != 8) { //error = "身份证中日期信息不正确!."; //alert(error); return false; } // calculate the sum of the products for(var i=0; i<17; i++) { lngProduct = lngProduct + varArray[i]; } // calculate the check digit intCheckDigit = 12 - lngProduct % 11; switch (intCheckDigit) { case 10: intCheckDigit = 'X'; break; case 11: intCheckDigit = 0; break; case 12: intCheckDigit = 1; break; } // check last digit if (idNumber.charAt(17).toUpperCase() != intCheckDigit) { //error ="身份证校验错误,请更正!"; //alert(error); return false; } } //length is 15 else{ var date8 = idNumber.substring(6, 14); // check date var reg = datereg; var result = reg.exec(date8); if (result == null || result[0].length != 8) { //error = "身份证中日期信息不正确!."; //alert(error); return false; } for (var i = 0; i < 17; i++) { lngProduct = lngProduct + varArray[i]; } // calculate the check digit intCheckDigit = lngProduct % 11; switch (intCheckDigit) { case 0: intCheckDigit = '1'; break; case 1: intCheckDigit = '0'; break; case 2: intCheckDigit = 'X'; break; case 3: intCheckDigit = '9'; break; case 4: intCheckDigit = '8'; break; case 5: intCheckDigit = '7'; break; case 6: intCheckDigit = '6'; break; case 7: intCheckDigit = '5'; break; case 8: intCheckDigit = '4'; break; case 9: intCheckDigit = '3'; break; case 10: intCheckDigit = '2'; break; } object.value = idNumber + intCheckDigit; } return true; } /* * calendar标签check函数 check单一标签 * 返回ture 正常日期 false 异常日期 */ function checkDateThis(tag){ var dateFormat = ["yyyy-MM-dd", "yyyy-MM", "yyyy/MM/dd", "yyyy/MM", "yyyy.MM.dd", "yyyy.MM", "yyyyMMdd", "yyyyMM", "yyyy"]; // 时间格式 对应正则表达式 需要补零 var regZeroFormat = [ /(([1-2][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([12][0-9])(0[48]|[2468][048]|[13579][26])|((1[26]|2[048])00))-02-29)$/, /([1-2][0-9]{3})-([0][1-9]|[1][0-2])$/, /(([1-2][0-9]{3})\/(((0[13578]|1[02])\/(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)\/(0[1-9]|[12][0-9]|30))|(02\/(0[1-9]|[1][0-9]|2[0-8]))))|((([12][0-9])(0[48]|[2468][048]|[13579][26])|((1[26]|2[048])00))\/02\/29)$/, /([1-2][0-9]{3})\/([0][1-9]|[1][0-2])$/, /(([1-2][0-9]{3})\.(((0[13578]|1[02])\.(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)\.(0[1-9]|[12][0-9]|30))|(02\.(0[1-9]|[1][0-9]|2[0-8]))))|((([12][0-9])(0[48]|[2468][048]|[13579][26])|((1[26]|2[048])00))\.02\.29)$/, /([1-2][0-9]{3})\.([0][1-9]|[1][0-2])$/, /(([1-2][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))|((([12][0-9])(0[48]|[2468][048]|[13579][26])|((1[26]|2[048])00))0229)$/, /([1-2][0-9]{3})([0][1-9]|[1][0-2])$/, /[1-2][0-9]{3}$/]; // 时间格式 对应正则表达式 无需补零 var regFormat = [ /(([1-2][0-9]{3})-(((0?[13578]|1[02])-(0?[1-9]|[12][0-9]|3[01]))|((0?[469]|11)-(0?[1-9]|[12][0-9]|30))|(0?2-(0?[1-9]|[1][0-9]|2[0-8]))))|((([12][0-9])(0[48]|[2468][048]|[13579][26])|((1[26]|2[048])00))-0?2-29)$/, /([1-2][0-9]{3})-([0]?[1-9]|[1][0-2])$/, /(([1-2][0-9]{3})\/(((0?[13578]|1[02])\/(0?[1-9]|[12][0-9]|3[01]))|((0?[469]|11)\/(0?[1-9]|[12][0-9]|30))|(0?2\/(0?[1-9]|[1][0-9]|2[0-8]))))|((([12][0-9])(0[48]|[2468][048]|[13579][26])|((1[26]|2[048])00))\/0?2\/29)$/, /([1-2][0-9]{3})\/([0]?[1-9]|[1][0-2])$/, /(([1-2][0-9]{3})\.(((0?[13578]|1[02])\.(0?[1-9]|[12][0-9]|3[01]))|((0?[469]|11)\.(0?[1-9]|[12][0-9]|30))|(0?2\.(0?[1-9]|[1][0-9]|2[0-8]))))|((([12][0-9])(0[48]|[2468][048]|[13579][26])|((1[26]|2[048])00))\.0?2\.29)$/, /([1-2][0-9]{3})\.([0]?[1-9]|[1][0-2])$/, /(([1-2][0-9]{3})(((0?[13578]|1[02])(0?[1-9]|[12][0-9]|3[01]))|((0?[469]|11)(0?[1-9]|[12][0-9]|30))|(0?2(0?[1-9]|[1][0-9]|2[0-8]))))|((([12][0-9])(0[48]|[2468][048]|[13579][26])|((1[26]|2[048])00))0?229)$/, /([1-2][0-9]{3})([0]?[1-9]|[1][0-2])$/, /[1-2][0-9]{3}$/]; var index; var node; var dateType; var zero; var reg = ""; if(typeof(tag) == "object"){ node = tag; } else { node = document.getElementById(tag); } if (node.value != null && node.value != "") { dateType = node.getAttribute("dateType"); zero = node.getAttribute("zero"); // 记录index for (index = 0; index < dateFormat.length; index++) { if (dateType == dateFormat[index]) { break; } } if (zero == "true") { reg = regZeroFormat[index]; } else if (zero == "false") { reg = regFormat[index]; } if (!(reg == undefined || reg == "" || !reg.test(node.value))) { if(reg.exec(node.value)[0].length == node.value.length){ return true; } } } return false; } /* * Numeric标签check函数 check单一标签 * 返回ture 正常数字 false 异常数字 */ function checkNumericThis(tag){ var node; var length; var positive; var numericLength; var integerLength; var reg = ""; if(typeof(tag) == "object"){ node = tag; } else { node = document.getElementById(tag); } if (node.value != null && node.value != "") { length = node.getAttribute("length").split(","); positive = node.getAttribute("positive"); integerLength = length[0]-1; numericLength = length[1]; node.value = node.value.replace(/^([+-]?)(0+)(\d)/, "$1$3"); if (positive == "negative" || positive == "positive") { reg = "(([1-9]"; }else if (positive == "Non-negative" || positive == "Non-positive") { reg = "((0|[1-9]"; }else { return false; } if (numericLength == 0) { reg += "[0-9]{0," + integerLength + "}))"; }else { reg += "[0-9]{0," + integerLength + "}|0)"; reg += "(\\.[0-9]{1," + numericLength + "})?)"; } if (positive == "positive" || positive == "Non-negative") { reg = "\\+?" + reg; }else if (positive == "negative") { reg = "-" + reg; }else if (positive == "Non-positive") { reg = "0|-" + reg; } reg = new RegExp(reg); if (!(reg == undefined || reg == "" || !reg.test(node.value))) { if(reg.exec(node.value)[0].length == node.value.length){ return true; } } } return false; } /* * Input标签check函数 check单一标签 * 返回ture 正常数字 false 异常数字 */ function checkInputThis(tag){ var tagType = ["mail","zipcode", "halfangle", "fullangle", "www", "phone", "mobile", "IDcard", "input"]; var tagFormat = [ /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/, /[1-9][0-9]{5}/, /^[\x00-\xff]+/, /[^\x00-\xff]+/, /[a-zA-z]+\:\/\/[\S]*/, /((((00[1-9][0-9]\-0[1-9])(\d{2}|\d{1}))|0[1-9](\d{2}|\d{1}))\-)?(\d{8}|\d{7})/, /1\d{10}/, ]; var index; var node; var type; var reg = ""; if(typeof(tag) == "object"){ node = tag; } else { node = document.getElementById(tag); } if (node.value != null && node.value != "") { type = node.getAttribute("type"); // 记录index for (index = 0; index < tagType.length; index++) { if (type == tagType[index]) { break; } } if(index == 8){ // 普通输入 无需验证 return true; }else if(index == 7){ // 校验身份证 return isIdCardNo(node.value, tag); }else { reg = tagFormat[index]; if (!(reg == undefined || reg == "" || !reg.test(node.value))) { if(reg.exec(node.value)[0].length == node.value.length){ return true; } } } } return false; } /* * 自动补齐日期格式 */ function date(tag){ var dateFormat = ["yyyy-MM-dd", "yyyy-MM", "yyyy/MM/dd", "yyyy/MM", "yyyy.MM.dd", "yyyy.MM", "yyyyMMdd", "yyyyMM", "yyyy"]; var keyDate = ["-","-","/","/",".",".",189,109,191,111,190,110]; var index; var node; var dateType; var zero; var reg = ""; if(typeof(tag) == "object"){ node = tag; } else { node = document.getElementById(tag); } if (node.value != null && node.value != "") { dateType = node.getAttribute("dateType"); zero = node.getAttribute("zero"); } // 记录index for (index = 0; index < dateFormat.length; index++) { if (dateType == dateFormat[index]) { break; } } var e = event || window.event; if(index < 6){ if (zero == "true") { if(node.value.length==4){ node.value += keyDate[index]; } else if(node.value.length==6){ if(e.keyCode == keyDate[index+6] || e.keyCode == keyDate[index+7]){ node.value = node.value.substring(0,5); } } if(index % 2 == 0 ){ if(node.value.length==7){ node.value += keyDate[index]; } else if(node.value.length==9){ if(e.keyCode == keyDate[index+6] || e.keyCode == keyDate[index+7]){ node.value = node.value.substring(0,8); } } } } else if (zero == "false") { if(node.value.length==4){ node.value += keyDate[index]; } else if(node.value.length==6){ if(e.keyCode == keyDate[index+6] || e.keyCode == keyDate[index+7]){ node.value = node.value.substring(0,5); } else if(e.keyCode!=96 && e.keyCode!=82 && e.keyCode!=97 && e.keyCode!=49){ node.value += keyDate[index]; } } if(index % 2 == 0 ){ if(node.value.length==7){ if(node.value.substring(5,6)!= 0 && node.value.substring(5,6)!= 1 && (e.keyCode == keyDate[index+6] || e.keyCode == keyDate[index+7])){ node.value = node.value.substring(0,6); } else if(node.value.substring(6,7)!= keyDate[index]){ node.value += keyDate[index]; } } else if(node.value.length==8){ if(node.value.substring(6,7)== keyDate[index]&& (e.keyCode == keyDate[index+6] || e.keyCode == keyDate[index+7])){ node.value = node.value.substring(0,7); } } else if(node.value.length==9){ if(e.keyCode == keyDate[index+6] || e.keyCode == keyDate[index+7]){ node.value = node.value.substring(0,8); } } } } } }