/** * 此Javascript提供了基本检验操作。 */ Validate=function Validate(){}; /** * 判断输入值是否为空(null or ""). * @param obj Object,标签对象. * @param isSpaceFilter boolean,是否先去除字符串右端的空格. * @return boolean,输入值是否为空. */ Validate.isBlank=function(obj,isSpaceFilter) { if(obj.value==null) return true; if(isSpaceFilter) { if(!(obj.type!=null && obj.type.toLowerCase()=="file"))//否则firefox中会报错 obj.value = StrUtil.rTrim(obj.value); } return obj.value=="" }; /** * 判断输入值是否为空(null or ""),去除字符串右端的空格. * @param obj Object,标签对象. * @return boolean,输入值是否为空. */ Validate.isBlankEx=function(obj) { return Validate.isBlank(obj,true); }; /** * 判断输入值是否为数值. * @param obj Object,标签对象. * @return boolean,输入值是否为数值. */ Validate.isNumber=function(obj) { if(!(obj.type!=null && obj.type.toLowerCase()=="file")) obj.value = StrUtil.rTrim(obj.value); return !isNaN(obj.value) }; /** * 判断输入值是否为整数. * @param obj Object,标签对象. * @return boolean,输入值是否为整数. */ Validate.isInteger=function(obj) { if(!Validate.isNumber(obj)) return false; if(StrUtil.rTrim(obj.value)=="") return true; if(parseInt(obj.value,10)==parseFloat(obj.value)) return true; else return false; }; /** * 判断输入值是否在一区间内. * @param obj Object,标签对象. * @param nMin float,左边界取值. * @param isContainMin boolean,是否左边界为闭区间. * @param nMax float,右边界取值. * @param isContainMax boolean,是否右边界为闭区间. * @return boolean,输入值是否在一区间内. */ Validate.isBetween=function(obj,nMin,isContainMin,nMax,isContainMax) { if(!Validate.isNumber(obj)) return false; var result = parseFloat(obj.value); var condition1 = (result>nMin && !isContainMin) || (result>=nMin && isContainMin); var condition2 = (result<nMax && !isContainMax) || (result<=nMax && isContainMax); if(condition1 && condition2) return true; else return false; }; /** * 判断输入值是否在一区间内(左边界为闭区间,右边界为闭区间). * @param obj Object,标签对象. * @param nMin float,左边界取值. * @param nMax float,右边界取值. * @return 输入值是否在一区间内. */ Validate.isBetweenEx=function(obj,nMin,nMax) { return Validate.isBetween(obj,nMin,true,nMax,true); }; /**判断输入值是否小于某一数值. * @param obj Object,标签对象. * @param nMax float,右边界取值. * @param isContainMax boolean,是否右边界为闭区间. * @return boolean,输入值是否小于某一数值. */ Validate.isBelow=function(obj,nMax,isContainMax) { if(!Validate.isNumber(obj)) return false; var result = parseFloat(obj.value); if(result<nMax && !isContainMax || result<=nMax && isContainMax) return true; else return false; }; /** * 判断输入值是否小于某一数值(右边界为闭区间). * @param obj Object,标签对象. * @param nMax float,右边界取值. * @param isContainMax boolean,是否右边界为闭区间. * @return boolean,输入值是否小于某一数值. */ Validate.isBelowEx=function(obj,nMax) { return Validate.isBelow(obj,nMax,true); }; /** * 判断输入值是否大于某一数值. * @param obj Object,标签对象. * @param nMin float,左边界取值. * @param isContainMin boolean,是否左边界为闭区间. * @return boolean,输入值是否小于某一数值. */ Validate.isAbove=function(obj,nMin,isContainMin) { if(!Validate.isNumber(obj)) return false; var result = parseFloat(obj.value); if(result>nMin && !isContainMin || result>=nMin && isContainMin) return true; else return false; }; /** * 判断输入值是否大于某一数值(左边界为闭区间). * @param obj Object,标签对象. * @parma nMin float,左边界取值. * @param isContainMin boolean,是否左边界为闭区间. * @return boolean,输入值是否小于某一数值. */ Validate.isAboveEx=function(obj,nMin) { return Validate.isAbove(obj,nMin,true); }; /** * 判断输入值是否为正数. * @param obj Object,标签对象. * @param isContainZero boolean,是否允许零为合法. * @return boolean,输入值是否为正数. */ Validate.isPositiveNumber=function(obj,isContainZero) { return Validate.isAbove(obj,0,isContainZero); }; /** * 判断输入值是否为正数(允许零为合法). * @param obj Object,标签对象. * @return boolean,输入值是否为正数. */ Validate.isPositiveNumberEx=function(obj) { return Validate.isPositiveNumber(obj,true); }; /** * 判断输入值是否为指定的合法字符串. * @param obj Object,标签对象. * @param species String,合法字符集. * @param isSpaceFilter boolean,是否先去除字符串两端的空格. * @return boolean,输入值是否为指定的合法字符串. */ Validate.VS_LETTER = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; Validate.VS_NUMBER = "0123456789"; Validate.VS_BASIC = Validate.VS_LETTER + Validate.VS_NUMBER; Validate.VS_COMMON = "@$()/.- _" + Validate.VS_BASIC; Validate.isValidString=function(obj,species,isSpaceFilter) { if(isSpaceFilter) { if(!(obj.type!=null && obj.type.toLowerCase()=="file")) obj.value = StrUtil.rTrim(obj.value); } for(i=0;i<obj.value.length;i++) if(species.indexOf(obj.value.charAt(i))<0) return false; return true; }; /** * 判断输入值是否为指定的合法字符串(以Validate.VS_COMMON为合法字符集,先去除字符串两端的空格). * @param obj Object,标签对象. * @return boolean,输入值是否为指定的合法字符串. */ Validate.isValidStringEx=function(obj) { return Validate.isValidString(obj,Validate.VS_BASIC,true); }; /** * 判断输入值是否为指定的合法的中文字符串. * @param obj Object,标签对象. * @param species String,其它合法字符集. * @param isSpaceFilter boolean,是否先去除字符串两端的空格. * @return boolean,输入值是否为指定的合法中文字符串. */ Validate.isValidChineseString=function(obj,species,isSpaceFilter) { if(isSpaceFilter ) { if(!(obj.type!=null && obj.type.toLowerCase()=="file")) obj.value = StrUtil.rTrim(obj.value); } for(i=0;i<obj.value.length;i++) if(species.indexOf(obj.value.charAt(i))<0 && obj.value.charCodeAt(i)<19968) return false; return true; }; /** * 判断输入值是否为指定的合法的中文字符串(以Validate.VS_COMMON为其它合法字符集,先去除字符串两端的空格). * @param obj Object,标签对象. * @return boolean,输入值是否为指定的合法中文字符串. */ Validate.isValidChineseStringEx=function(obj) { return Validate.isValidChineseString(obj,Validate.VS_BASIC,true); }; /** * 判断输入值是否为指定的合法的扩展(含中文)字符串. * @param obj Object,标签对象. * @param species,其它合法字符集. * @param isSpaceFilter boolean,是否先去除字符串两端的空格. * @return boolean,输入值是否为指定的合法扩展(含中文)字符串. */ Validate.isValidExtendedString=function(obj,species,isSpaceFilter) { if(isSpaceFilter) { if(!(obj.type!=null && obj.type.toLowerCase()=="file")) obj.value = StrUtil.rTrim(obj.value); } for(i=0;i<obj.value.length;i++) if(species.indexOf(obj.value.charAt(i))<0 && obj.value.charCodeAt(i)<128) return false; return true; }; /** * 判断输入值是否为指定的合法的扩展(含中文)字符串(以Validate.VS_COMMON为其它合法字符集,先去除字符串两端的空格). * @param obj Object,标签对象. * @return boolean,输入值是否为指定的合法扩展(含中文)字符串. */ Validate.isValidExtendedStringEx=function(obj) { return Validate.isValidExtendedString(obj,Validate.VS_COMMON,true); }; /** * 判断输入值是否为合法的日期类型(格式为yyyy[?mm?dd]其中年份必须为[1000,9999]). * @param obj Object,标签对象. * @param conjunction String,为年月日的连接符. * @return boolean,输入值是否为合法的日期类型. */ Validate.isStandardDate=function(obj,conjunction) { if(!(obj.type!=null && obj.type.toLowerCase()=="file")) obj.value = StrUtil.rTrim(obj.value); if(obj.value=="") return true; var isCheckConj=conjunction && conjunction!=""?true:false; var len=obj.value.length; var year = ""; var month=""; var day=""; var index=0; for(;index<obj.value.length;index++) { var charVal=obj.value.charAt(index); if(!isNaN(charVal) && charVal!=' ') { year+=charVal; if(!isCheckConj && year.length==4) { index++; break; } } else { if(isCheckConj && charVal!=conjunction) return false; break; } } var isStart=false; for(;index<obj.value.length;index++) { var charVal=obj.value.charAt(index); if(!isNaN(charVal) && charVal!=' ') { month+=charVal; isStart=true; if(!isCheckConj && month.length==2) { index++; break; } } else if(isStart) { if(isCheckConj && charVal!=conjunction) return false; break; } } isStart=false; for(;index<obj.value.length;index++) { var charVal=obj.value.charAt(index); if(!isNaN(charVal) && charVal!=' ' ) { day+=charVal; isStart=true; if(!isCheckConj && day.length==2) { index++; break; } } else if(isStart) break; } if(month.length==0) month="01"; if(day.length==0) day="01"; var condition1 = isNaN(year) || isNaN(month) || isNaN(day); var condition2 = parseInt(year,10)!=parseFloat(year) || parseInt(month,10)!=parseFloat(month) || parseInt(day,10)!=parseFloat(day) if(condition1 || condition2) return false; var d = new Date(year,month-1,day); var year2 = d.getFullYear(); var month2 = d.getMonth()+1; var day2 = d.getDate(); if(year==year2 && month==month2 && day==day2) return true; else return false; }; /** * 判断输入值是否为合法的日期类型(格式为yyyy?mm?dd其中年份必须为[1000,9999],年月日连接符为“-”). * @param obj Object,标签对象. * @return boolean,输入值是否为合法的日期类型. */ Validate.isStandardDateEx=function(obj) { return Validate.isStandardDate(obj,"-"); }; /** * 判断输入值长度是否在一闭区间内. * @param obj Object,标签对象. * @param nMin int,长度左边界. * @param nMax int,长度右边界. * @return boolean,输入值长度是否在一闭区间内. */ Validate.isLengthBetween=function(obj,nMin,nMax) { if(!(obj.type!=null && obj.type.toLowerCase()=="file")) obj.value = StrUtil.rTrim(obj.value); if(obj.value.length>=nMin && obj.value.length<=nMax) return true; else return false; }; /** * 判断输入值长度是否小于某一值. * @param obj Object,标签对象. * @param nMax int,长度右边界. * @return boolean,输入值长度是否小于某一值. */ Validate.isLengthBelow=function(obj,nMax) { return Validate.isLengthBetween(obj,0,nMax); }; /** * 判断输入值长度是否为某一值. * @param obj Object,标签对象. * @param n int,字符串必须长度. * @return boolean,输入值长度是否为某一值. */ Validate.isLengthEqual=function(obj,n) { return Validate.isLengthBetween(obj,n,n); }; /** * 判断输入值是否不含有某些字符. * @param obj Object,标签对象. * @parma species String,不合法字符集. * @param isSpaceFilter boolean,是否先去除字符串两端的空格. * @return boolean,输入值是否不含有某些字符. */ Validate.NC_BASIC = "<>"; Validate.NC_COMMON = Validate.NC_BASIC+"\"\'"; Validate.isNotContain=function(obj,species,isSpaceFilter) { if(isSpaceFilter) { if(!(obj.type!=null && obj.type.toLowerCase()=="file")) obj.value = StrUtil.rTrim(obj.value); } for(i=0;i<species.length;i++) if(obj.value.indexOf(species.charAt(i))>=0) return false; return true; }; /** * 判断输入值是否不含有某些字符(以Validate.NC_COMMON为不合法字符集,先去除字符串两端的空格). * @param obj Object,标签对象. * @return boolean,输入值是否不含有某些字符. */ Validate.isNotcontainEx=function(obj) { return Validate.isNotContain(obj,Validate.NC_COMMON,true); }; /** * 判断输入值是否含有某些字符(不去除字符串两端的空格). * @param obj Object,标签对象. * @param species String,必须含有的字符集 * @return boolean,输入值是否含有某些字符. */ Validate.isContain=function(obj,species) { for(i=0;i<species.length;i++) if(obj.value.indexOf(species.charAt(i))<0) return false; return true; }; /** * 检验form表单中的输入项是否已输入完整. * @param form Form表单对象. * @return boolean 非空项是否均输入内容. */ Validate.checkInputFull=function(form) { var isValid=true; var errMessage=""; var first=null; var itemArray=form.elements; for(var e=0;e<itemArray.length;e++) { var itemObj=itemArray[e]; var nullable=itemObj.getAttribute("nullable"); if(nullable==null || nullable=="" || nullable=="1") continue; var isBlankItem=false; isBlankItem=Validate.isBlank(itemObj,true); if(isBlankItem && first==null) first=itemObj; if(isBlankItem) { var itemDesc=itemObj.getAttribute("itemdesc"); if(itemDesc==null || itemDesc=="") itemDesc=itemObj.name; if(errMessage.indexOf(itemDesc+",")==-1) errMessage+=itemDesc+","; isValid=false; } } if(isValid==false) { TabUtil.showParentPage(first); alert("信息不完整,以下项必须全部输入:\r\n"+errMessage.substring(0,errMessage.length-1)); first.focus(); } return isValid; }; /** * 激发检查值。 * @param event 事件对象。 */ Validate.fireCheckValue=function(event) { var curObj=EventUtil.eventCurrentTarget(event); var isPass=Validate.checkValue(curObj); if(!isPass && Constants.isIE) { var targetObj=PubUtil.getActiveElement(); //if(event.target) //targetObj=event.target; //else //targetObj=PubUtil.getActiveElement(); if(targetObj!=null && Validate.checkValue(targetObj))//不验证会死循环。 curObj.focus(); } } /** * 检验表单的某元素值是否正确. * @param obj 元素对象. * @return boolean 是否正确. */ Validate.checkValue=function(obj) { if(Validate.isBlank(obj,true)) return true; var itemDesc=obj.getAttribute("itemdesc"); if(itemDesc==null || itemDesc=="") itemDesc=obj.name; var maxLen=obj.getAttribute("maxlen"); if(maxLen==null && obj.tagName.toLowerCase()=="input") maxLen=obj.getAttribute("maxlength"); if(maxLen!=null && maxLen!="" && StrUtil.byteLen(obj.value)>parseInt(maxLen)) { alert(itemDesc+"值的长度不能超过"+maxLen+"个字符,中文占两字符!"); return false; } var minLen=obj.getAttribute("minlen"); if(minLen!=null && StrUtil.byteLen(obj.value)<parseInt(minLen)) { alert(itemDesc+"值的长度必须不少于"+minLen+"个字符,中文占两字符!"); return false; } var isValid=true; var dataType=obj.getAttribute("datatype"); if(dataType==null) return true; dataType=dataType.toLowerCase(); var errMessage=""; switch(dataType) { case "int": isValid=Validate.isInteger(obj); if(!isValid) errMessage="的值:"+obj.value+"不是合法的整数类型!"; break; case "num": isValid=Validate.isNumber(obj); if(!isValid) errMessage="的值:"+obj.value+"不是合法的数字类型!"; break; case "str": break; case "date": isValid=Validate.isStandardDate(obj); if(!isValid) errMessage="的值:"+obj.value+"不是合法的日期类型!"; break; } if(dataType=="int" || dataType=="num") { var minValue=obj.getAttribute("minvalue"); if(isValid && minValue!=null && !Validate.isAboveEx(obj,parseFloat(minValue))) errMessage="的值必须大于等于"+minValue+"!"; var maxValue=obj.getAttribute("maxvalue"); if(isValid && maxValue!=null && !Validate.isBelowEx(obj,parseFloat(maxValue))) { isValid=false; errMessage="的值必须小于等于"+maxValue+"!"; } var digits=obj.getAttribute("digits"); if(digits!=null) { var pos=obj.value.indexOf("."); if(pos>-1) { if(obj.value.length-pos-1>parseInt(digits)) { isValid=false; errMessage="的值小数位不能超过"+digits+"!"; } } } var precision=obj.getAttribute("precision"); if(precision!=null) { var value=obj.value; var length=value.indexOf("."); if(length==-1) length=value.length; if(value.substring(0,1)=="-" || value.substring(0,1)=="+") length--; var size=parseInt(precision); if(digits!=null) size-=parseInt(digits); if(length>size) { isValid=false; errMessage="的值整数位不能超过"+precision+"位"; } } } if(!isValid) alert("值错误:"+itemDesc+errMessage); var checkFunc=obj.getAttribute("checkfunc"); if(isValid && checkFunc!=null && checkFunc.length>0) isValid=eval(checkFunc+"('"+PubUtil.myEscape(obj.value)+"','"+PubUtil.myEscape(itemDesc)+"')"); return isValid; }; /** * 检验form表单中的元素值是否合法. * @param form form表单对象. * @return 是否合法,是返回true,否则false. */ Validate.checkFormItemValue=function(form) { if(!form) return true; var isValid=true; var itemArray=form.elements; for(var e=0;e<itemArray.length;e++) { isValid=Validate.checkValue(itemArray[e]); if(!isValid) break; } return isValid; }; /** * 验证给定值是否是标识,即由字典、数字及下划线组成。 * @param value 给定值。 * @param 元素描述。 */ Validate.checkID=function(value,desc) { if(value==null || value.length==0) { alert(desc+"不能为空!"); return false; } for(var i=0;i<value.length;i++) { var curChar=value.charAt(i); if(curChar>='a' && curChar<='z' || curChar>='A' && curChar<='Z' || curChar=='_' || curChar>='0' && curChar<='9') continue; alert(desc+"只能由字母、数字及下划线组成!"); return false; } return true; }; /** * 验证给定值是否是标识,即由字典、数字及下划线及中文(不包括特殊符号,如引号、括号)组成。 * @param value 给定值。 * @param 元素描述。 */ Validate.checkIDExt=function(value,desc) { if(value==null || value.length==0) { alert(desc+"不能为空!"); return false; } var charArr=new Array(',','。',';',' ','!','(',')','’','”','+','-','*','、'); for(var i=0;i<value.length;i++) { var curChar=value.charAt(i); if(curChar>='a' && curChar<='z' || curChar>='A' && curChar<='Z' || curChar=='_' || curChar>='0' && curChar<='9') continue; if(value.charCodeAt(i)>19968) { var isValid=true; for(var j=0;j<charArr.length;j++) { if(charArr[j]==curChar) { isValid=false; break; } } if(isValid) continue; } alert(desc+"只能由字母、数字及下划线及中文组成!"); return false; } return true; }; /** * 验证元素值是否合法的Email。 * @param value 元素值。 * @param desc 元素描述。 */ Validate.checkEmail=function(value,desc) { var flagNum=0; for(var i=0;i<value.length;i++) { if(value.charAt(i)=='@') flagNum++; } if(flagNum!=1) { alert(desc+"的值错误,在Email中必须包含一个@符号!"); return false; } var index=value.indexOf("@"); if(index==0) { alert(desc+"的值错误,在Email中@前必须有字符!"); return false; } if(value.substring(index+1).indexOf(".")==-1) { alert(desc+"的值错误,非法的Email!"); return false; } return true; };