var fk; var mode; var Browser = new Object(); Browser.isMozilla = (typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined') && (typeof HTMLDocument!='undefined'); Browser.isIE = window.ActiveXObject ? true : false; Browser.isFirefox = (navigator.userAgent.toLowerCase().indexOf("firefox")!=-1); Browser.isSafari = (navigator.userAgent.toLowerCase().indexOf("safari")!=-1); Browser.isOpera = (navigator.userAgent.toLowerCase().indexOf("opera")!=-1); 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}?$|15[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,8}$/, integer : /^[-\+]?\d+$/, double : /^[-\+]?\d+(\.\d+)?$/, english : /^[A-Za-z]+$/, chinese : /^[\u0391-\uFFE5]+$/, userName : /^[a-z_ ]\w{3,}$/i, containChinese : /[\u4E00-\u9FA5]/g , //unSafe : /^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/, unSafe : /[<>\?\#\$\*\&;\\\/\[\]\{\}=\(\)\.\^%,]/, //safeStr : /[^#\'\"~\.\*\$&;\\\/\|]/, isSafe : function(str){return !this.unSafe.test(str);}, safeString : "this.isSafe(value)", filter : "this.doFilter(value)", limit : "this.checkLimit(this.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)", strlen : function (str){ if(Browser.isFirefox) { Charset = document.characterSet; } else { Charset = document.charset; } if(Charset.toLowerCase() == 'utf-8') { return str.replace(/[\u4e00-\u9fa5]/g, "***").length; } else { return str.replace(/[^\x00-\xff]/g, "**").length; } }, 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("-"); } if(!this.isDate(date, "ymd")) return false; var sum = 0; for(var i = 0;i<=16;i++){ sum += Ai.charAt(i) * Wi[i]; } 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; } 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() == 'utf-8') ? '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') { errmsg = errmsg ? errmsg : data; fk = false; (type!='checkbox' && type!='radio' && element.addClass('errinput')); if(mode == 1) { if(msgid) { id = '#' + msgid; $(id).removeClass('yes'); $(id).addClass('no'); $(id).html(errmsg); } else { jQuery("").html(errmsg).insertAfter(element); } } else if(mode == 2) { alert(errmsg); } return false; } else { fk = true; if(msgid) { id = '#' + msgid; $(id).removeClass('no'); $(id).addClass('yes'); $(id).html(''); } else { jQuery(" ").insertAfter(element); } 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) { if(msgid) { id = '#' + msgid; $(id).removeClass('yes'); $(id).addClass('no'); $(id).html(errmsg); } else { jQuery("").html(errmsg).insertAfter(element); } } else { alert(errmsg); } } validator.removeErr = function(element){ element.removeClass(this['errinput']); element.parent('*').find('span[tag="err"]').remove(); } validator.checkajax = function(element, datatype, errindex) { var value=jQuery.trim(element.val()); this['element'] = element; this['errindex'] = errindex; validator.removeErr(element); return eval(this[datatype]); } 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; } } 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; } if(data != 'ajax') { if(validator.checkDatatype(obj,data)==false){ validator.showErr(obj, index); return ok=false; } else { var msgid= obj.attr('msgid'); if(msgid) { id = '#' + msgid; $(id).removeClass('no'); $(id).addClass('yes'); $(id).html(''); } else { jQuery(" ").insertAfter(obj); } } } else { ok = validator.checkajax(obj, data, index); } }); return ok; } jQuery.fn.validatorForm = function(m){ if(typeof(m) != 'function') mode = (m==1) ? 1 : 0; else mode = 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; } if(typeof(m) == 'function') { var submit_btn = form.find("[type='submit']"); submit_btn.attr('disabled', true); $.post(form.attr('action'), form.serialize(), function(json){ m(json); submit_btn.attr('disabled', false); }, 'json'); return false; } return true; }); }