validator.js 8.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. var fk;var mode;validator={errinput:'errinput',errmsg:'errmsg',errcls:'no',yescls:'yes',require:/[^(^\s*)|(\s*$)]/,email:/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,phone:/^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/,mobile:/^((\(\d{3}\))|(\d{3}\-))?13[0-9]\d{8}?$|14[0-9]\d{8}?$|15[0-9]\d{8}?$|16[0-9]\d{8}?$|17[0-9]\d{8}?$|18[0-9]\d{8}?$|19[0-9]\d{8}?$/,url:/^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/,idCard:"this.isIdCard(value)",currency:/^\d+(\.\d+)?$/,number:/^\d+$/,zip:/^[1-9]\d{5}$/,ip:/^[\d\.]{7,15}$/,qq:/^[1-9]\d{4,11}$/,integer:/^[-\+]?\d+$/,double:/^[-\+]?\d+(\.\d+)?$/,english:/^[A-Za-z]+$/,chinese:/^[\u0391-\uFFE5]+$/,userName:/^[\u0391-\uFFE5]+$|^\w+$/i,unSafe:/[<>\?\#\$\*\&;\\\/\[\]\{\}=\(\)\.\^%,]/,isSafe:function(str){return!this.unSafe.test(str);},safeString:"this.isSafe(value)",filter:"this.doFilter(value)",limit:"this.checkLimit(Common.strlen(value))",limitB:"this.checkLimit(this.LenB(value))",date:"this.isDate(value)",repeat:"this.checkRepeat(value)",range:"this.checkRange(value)",compare:"this.checkCompare(value)",custom:"this.Exec(value)",group:"this.mustChecked()",ajax:"this.doajax(errindex)",isIdCard:function(number){var date,Ai;var verify="10x98765432";var Wi=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];var area=['','','','','','','','','','','','北京','天津','河北','山西','内蒙古','','','','','','辽宁','吉林','黑龙江','','','','','','','','上海','江苏','浙江','安微','福建','江西','山东','','','','河南','湖北','湖南','广东','广西','海南','','','','重庆','四川','贵州','云南','西藏','','','','','','','陕西','甘肃','青海','宁夏','新疆','','','','','','台湾','','','','','','','','','','香港','澳门','','','','','','','','','国外'];var re=number.match(/^(\d{2})\d{4}(((\d{2})(\d{2})(\d{2})(\d{3}))|((\d{4})(\d{2})(\d{2})(\d{3}[x\d])))$/i);if(re==null)return false;if(re[1]>=area.length||area[re[1]]=="")return false;if(re[2].length==12){Ai=number.substr(0,17);date=[re[9],re[10],re[11]].join("-");}else{Ai=number.substr(0,6)+"19"+number.substr(6);date=["19"+re[4],re[5],re[6]].join("-");}
  2. if(!this.isDate(date,"ymd"))return false;var sum=0;for(var i=0;i<=16;i++){sum+=Ai.charAt(i)*Wi[i];}
  3. Ai+=verify.charAt(sum%11);return(number.length==15||number.length==18&&number==Ai);},isDate:function(op){var formatString=this['element'].attr('format');formatString=formatString||"ymd";var m,year,month,day;switch(formatString){case"ymd":m=op.match(new RegExp("^((\\d{4})|(\\d{2}))([-./])(\\d{1,2})\\4(\\d{1,2})$"));if(m==null)return false;day=m[6];month=m[5]*1;year=(m[2].length==4)?m[2]:GetFullYear(parseInt(m[3],10));break;case"dmy":m=op.match(new RegExp("^(\\d{1,2})([-./])(\\d{1,2})\\2((\\d{4})|(\\d{2}))$"));if(m==null)return false;day=m[1];month=m[3]*1;year=(m[5].length==4)?m[5]:GetFullYear(parseInt(m[6],10));break;default:break;}
  4. if(!parseInt(month))return false;month=month==0?12:month;var date=new Date(year,month-1,day);return(typeof(date)=="object"&&year==date.getFullYear()&&month==(date.getMonth()+1)&&day==date.getDate());function GetFullYear(y){return((y<30?"20":"19")+y)|0;}},doFilter:function(value){var filter=this['element'].attr('accept');return new RegExp("^.+\.(?=EXT)(EXT)$".replace(/EXT/g,filter.split(/\s*,\s*/).join("|")),"gi").test(value);},checkLimit:function(len){var minval=this['element'].attr('min')||Number.MIN_VALUE;var maxval=this['element'].attr('max')||Number.MAX_VALUE;return(minval<=len&&len<=maxval);},LenB:function(str){return str.replace(/[^\x00-\xff]/g,"**").length;},checkRepeat:function(value){var to=this['element'].attr('to');return value==jQuery('input[name="'+to+'"]').eq(0).val();},checkRange:function(value){value=value|0;var minval=this['element'].attr('min')||Number.MIN_VALUE;var maxval=this['element'].attr('max')||Number.MAX_VALUE;return(minval<=value&&value<=maxval);},checkCompare:function(value){var compare=this['element'].attr('compare');if(isNaN(value))return false;value=parseInt(value);return eval(value+compare);},Exec:function(value){var reg=this['element'].attr('regexp');return new RegExp(reg,"gi").test(value);},mustChecked:function(){var tagName=this['element'].attr('name');var f=this['element'].parents('form');var n=f.find('input[name="'+tagName+'"][checked]').length;var count=f.find('input[name="'+tagName+'"]').length;var minval=this['element'].attr('min')||1;var maxval=this['element'].attr('max')||count;return(minval<=n&&n<=maxval);},doajax:function(value){var fk;var element=this['element'];var errindex=this['errindex'];var url=this['element'].attr('url');var mode=element.attr('mode')||1;var msgid=element.attr('msgid');var val=this['element'].val();var str_errmsg=this['element'].attr('msg');var arr_errmsg=str_errmsg.indexOf('|')?str_errmsg.split('|'):str_errmsg;var errmsg=arr_errmsg[errindex];var type=this['element'].attr('type');var errcls=this['errcls'];var yescls=this['yescls'];var param=val?this['element'].attr('param')+'&value='+val:this['element'].attr('param');var Charset=Browser.isIE?document.charset:document.characterSet;var methodtype=(Charset.toLowerCase()=='gb2312')?'post':'get';var method=this['element'].attr('method')||methodtype;var s=$.ajax({type:method,url:url,data:param,cache:false,async:false,success:function(data){data=data.replace(/(^\s*)|(\s*$)/g,"");if(data!='success')
  5. {errmsg=errmsg?errmsg:data;fk=false;(type!='checkbox'&&type!='radio'&&element.addClass('errinput'));if(mode==1)
  6. {if(msgid)
  7. {id='#'+msgid;$(id).removeClass('yes');$(id).addClass('no');$(id).html(errmsg);}
  8. else
  9. {jQuery("<span tag='err' class='"+errcls+"'></span>").html(errmsg).insertAfter(element);}}
  10. else if(mode==2)
  11. {alert(errmsg);}
  12. return false;}
  13. else
  14. {fk=true;if(msgid)
  15. {id='#'+msgid;$(id).removeClass('no');$(id).addClass('yes');$(id).html('');}
  16. else
  17. {jQuery("<span tag='err' class='"+yescls+"'>&nbsp;</span>").insertAfter(element);}
  18. return true;}}}).responseText;s=s.replace(/(^\s*)|(\s*$)/g,"");return s=='success'?true:false;}};validator.showErr=function(element,errindex){var str_errmsg=element.attr('msg')||'unkonwn';var arr_errmsg=str_errmsg.split('|');var errmsg=arr_errmsg[errindex]?arr_errmsg[errindex]:arr_errmsg[0];var mode=element.attr('mode')||1;var msgid=element.attr('msgid');var type=element.attr('type');(type!='checkbox'&&type!='radio'&&element.addClass(this['errinput']));if(mode==1)
  19. {if(msgid)
  20. {id='#'+msgid;$(id).removeClass('yes');$(id).addClass('no');$(id).html(errmsg);}
  21. else
  22. {jQuery("<span tag='err' class='"+this['errcls']+"'></span>").html(errmsg).insertAfter(element);}}
  23. else
  24. {alert(errmsg);}}
  25. validator.removeErr=function(element){element.removeClass(this['errinput']);element.parent('*').find('span[tag="err"]').remove();}
  26. validator.checkajax=function(element,datatype,errindex)
  27. {var value=jQuery.trim(element.val());this['element']=element;this['errindex']=errindex;validator.removeErr(element);return eval(this[datatype]);}
  28. validator.checkDatatype=function(element,datatype){var value=jQuery.trim(element.val());this['element']=element;validator.removeErr(element);switch(datatype){case"idCard":case"date":case"repeat":case"range":case"compare":case"custom":case"group":case"limit":case"limitB":case"safeString":case"filter":return eval(this[datatype]);break;default:return this[datatype].test(value);break;}}
  29. validator.check=function(obj){var datatype=obj.attr('datatype');if(typeof(datatype)=="undefined")return true;if(obj.attr('require')!="true"&&obj.val()=="")return true;var datatypes=datatype.split('|');var ok=true;jQuery.each(datatypes,function(index,data){if(typeof(validator[data])=="undefined"){ok=false;return false;}
  30. if(data!='ajax')
  31. {if(validator.checkDatatype(obj,data)==false){validator.showErr(obj,index);return ok=false;}
  32. else
  33. {var msgid=obj.attr('msgid');if(msgid)
  34. {id='#'+msgid;$(id).removeClass('no');$(id).addClass('yes');$(id).html('');}
  35. else
  36. {jQuery("<span tag='err' class='yes'></span>").insertAfter(obj);}}}
  37. else
  38. {ok=validator.checkajax(obj,data,index);}});return ok;}
  39. jQuery.fn.checkForm=function(m){mode=(m==1)?1:0;var form=jQuery(this);var elements=form.find('input[require],select[require],textarea[require]');elements.blur(function(index){return validator.check(jQuery(this));});form.submit(function(){var ok=true;var errIndex=new Array();var n=0;elements.each(function(i){if(validator.check(jQuery(this))==false){ok=false;errIndex[n++]=i;};});if(ok==false){elements.eq(errIndex[0]).focus().select();return false;}
  40. if(document.getElementById('video_uploader')&&!upLoading)
  41. {uploadFile();return false;}
  42. if($('#f_filed_1')&&set_show==false)
  43. {$("select[@id=catids] option").each(function()
  44. {$(this).attr('selected','selected');});}
  45. if($('#hava_checked').val()==0)
  46. {YP_checkform();return false;}
  47. return true;});}