标签:style blog io ar color os sp for on
/* Author:xieqiaoyun@oneplus.cn Date:2013-12-24 */ ;(function(win,doc,$){ var log = function(){ try{ console.log.apply(console,arguments); }catch(e){ try{ opera.postErrors.apply(opera,arguments); }catch(e){ return false; // alert(Array.prototype.join.call(arguments," ")); } } }; function getIdCardInfo(idcard){ var sigma = 0; var a = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ); var w = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"); for(var i = 0; i < 17; i++) { var ai = parseInt(idcard.substring(i, i + 1)); var wi = a[i]; sigma += ai * wi; } var number = sigma % 11; return idcard.substring(0,17)+w[number]; } function idCard15To18(id){ var W = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1); var A = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"); var i,j,s=0; var newid; newid = id; newid = newid.substring(0,6)+"19"+newid.substring(6,id.length); for(i=0;i<newid.length;i++ ){ j= parseInt(newid.substring(i,i+1))*W[i]; s=s+j; } s = s % 11; newid=newid+A[s]; return newid; } var FormValidate=function(options){ log("FormValidate"); this.o=$.extend(true,{},this.defaults,options); var inputs = !!this.o.formID?$(this.o.formID).find("[rules]"):$("[rules]"),elems=[]; inputs.each(function(e){ if($(this).attr("rules")!=""){ elems.push({"type":$(this).attr("rules"),"node":this.id,"val":this.value}); } }); this.doinit(elems); log("elems length:"+elems.length); } FormValidate.prototype={ defaults:{ rules:{ "idcard":"idcard", "number":"number", "numberAndEnglish":"numberAndEnglish", "english":"english", "chinese":"chinese", "mobilePhone":"mobilePhone", "areaCode":"areaCode", "phoneNumber":"phoneNumber", "tel":"tel", "email":"email", "postCode":"postCode", "validCode":"validCode", "password":"password", "password2":"password2", "range":"range", "min":"min", "max":"max", "mobilePhoneAndEmail":"mobilePhoneAndEmail"/*, "defaults":"defaults"*/ }, regx:{ "number":/^[+-]?\d+(\.\d+)?$/, "numberAndEnglish":/^[A-Za-z0-9]+$/, "english":/^[A-Za-z_]+$/, "chinese":/^[\u4e00-\u9fa5]+$/, "mobilePhone":/^1[3|4|5|8]\d{9}$/, "areaCode":/^0\d{2,3}$/, "phoneNumber":/\d{7,8}$/, "tel":/^1[3|4|5|8]\d{9}$|^(0\d{2,3}-?|\(0\d{2,3}\))?[1-9]\d{4,7}(-\d{1,8})?$/, "email":/^[\w.-]+@\w+(\.\w+)?\.\w{2,3}/gi, "postCode":/^[1-9]\d{5}$/, "validCode":/\d{6}/, "password":/((?=.*[A-Za-z~!@#$%^&*()-+=|{}<>\?])(?=.*\d)|(?=.*\d)(?=.*A-Za-z~!@#$%^&*()-+=|{}<>\?))[\w\~!@#$%\^&\*\(\)-+=|<>\?]{8,16}/ }, errmsg:{ "nonEmpty":"必填项", "empty":"", "idcard":"身份证号码有误", "number":"请输入数字", "numberAndEnglish":"请输入数字或字母", "english":"请输入英文字母或下划线", "chinese":"请输入中文字符", "mobilePhone":"请输入正确的手机号码", "areaCode":"请输入正确的区号", "phoneNumber":"请输入正确的电话号码", "tel":"请输入正确的电话号码", "email":"请输入正确的Email地址", "postCode":"请输入正确的邮政编码", "validCode":"请输入正确的验证码", "password":"密码必须是8-16位英文字母和数字的组合", "password2":"两次输入的密码不一致", "range":"字符长度不在区间内", "charMin":"字符长度超出限制", "charMax":"字符长度必须大于设定值", "mobilePhoneAndEmail":"请输入手机号码或电子邮箱地址", "defaults":"验证错误" }, urls:{ }, success:{"valid":true,"msg":"验证通过"} }, errors:{}, doinit:function(elems){ log("init validator..."); var _parent = this; if(elems.length>0){ for(var k in elems){ (function(k,elem){ $("#"+elem["node"]).bind("blur",function(){ _parent.validate.call(_parent,elem,k); }); })(k,elems[k]); } } }, validate:function(elem,k){ if(!elem["type"]){ return {"valid":false,"msg":"验证错误"}; } var patterns = elem["type"].split(","),i=0,l=patterns.length; this.doValid(patterns,elem,i,l,k); }, doValid:function(type,elem,i,l,k){ var errs; if(i<l && typeof(this[type[i]])=="function"){ if(this[type[i]](elem)){ errs=this.errors[type[i]+"_"+k]=this.o.success; this.showErrorTip(errs["valid"],elem["node"],errs["msg"]); if(type[i]!="empty"){ i++; this.doValid.call(this,type,elem,i,l,k); }else{ this.resetMsg(type,i,k); } }else{ if(type[i]=="empty"){ errs=this.errors[type[i]+"_"+k]=this.o.success; this.showErrorTip(errs["valid"],elem["node"],errs["msg"]); i++; this.doValid.call(this,type,elem,i,l,k); }else{ errs=this.errors[type[i]+"_"+k]={"valid":false,"msg":this.o.errmsg[type[i]]}; this.showErrorTip(errs["valid"],elem["node"],errs["msg"]); } } } }, resetMsg:function(type,i,k){ var rules; if(type.length>i){ for(var j=i+1;j<type.length;j++){ delete this.errors[type[j]+"_"+k]; } } }, isValid:function(){ var isvalid=true; for(var i in this.errors){ if(!this.errors[i]["valid"]){ isvalid=this.errors[i]["valid"]; break; } } return isvalid; }, blur:function(){ var elems=!!this.o.formID?$(this.o.formID).find("[rules]:visible"):$("[rules]:visible"),rules,errs; for(var i=0;i< elems.length;i++){ rules=$(elems[i]).attr("rules").split(","); for(var k in rules){ // if(!this.errors[rules[k]]){ $(elems[i]).blur(); // } } } }, isEmpty:function(obj){ for(var name in obj){ return false; } return true; }, showErrorTip:function(valid,elem,msg){ var _elm = $("#"+elem); if(valid){ if(!!this.o.tipbox){ $(this.o.tipbox).find(".vt_"+elem).html("").hide(); }else{ _elm.parent().find(".validate_tip").html("").hide(); } _elm.removeClass("validate_br"); }else{ if(!!this.o.tipbox){ if($(this.o.tipbox).find(".vt_"+elem).length==0){ $(this.o.tipbox).append("<em class=\"validate_tip vt_"+elem+"\">"+msg+"</em>").show(); }else{ $(this.o.tipbox).find(".vt_"+elem).html(msg).show(); } }else{ if(_elm.parent().find(".validate_tip").length==0){ _elm.parent().find(".validate_tip").blur(); _elm.parent().append("<em class=\"validate_tip\">"+msg+"</em>").show(); }else{ _elm.parent().find(".validate_tip").html(msg).show(); } } _elm.addClass("validate_br"); } }, // 身份证号码 idcard:function(elem){ elem["val"] = $.trim($("#"+elem["node"]).val()); if(elem["val"].length==18){ return getIdCardInfo(elem["val"])==elem["val"]; }else if(elem["val"].length==15){ var id18=idCard15To18(elem["val"]); return getIdCardInfo(id18)==elem["val"]; }else{ return false; } }, // 数字 number:function(elem){ elem["val"] = $.trim($("#"+elem["node"]).val()); return new RegExp(this.o.regx["number"]).test(elem["val"]); }, // 数字或字母或数字字母的组合 numberAndEnglish:function(elem){ elem["val"] = $.trim($("#"+elem["node"]).val()); return new RegExp(this.o.regx["numberAndEnglish"]).test(elem["val"]); }, // 英文字符 english:function(elem){ elem["val"] = $.trim($("#"+elem["node"]).val()); return new RegExp(this.o.regx["english"]).test(elem["val"]); }, // 中文字符 chinese:function(elem){ elem["val"] = $.trim($("#"+elem["node"]).val()); return new RegExp(this.o.regx["chinese"]).test(elem["val"]); }, // 手机号码 mobilePhone:function(elem){ elem["val"] = $.trim($("#"+elem["node"]).val()); return new RegExp(this.o.regx["mobilePhone"]).test(elem["val"]); }, // 区号 areaCode:function(elem){ elem["val"] = $.trim($("#"+elem["node"]).val()); return new RegExp(this.o.regx["areaCode"]).test(elem["val"]); }, // 电话号码 phoneNumber:function(elem){ elem["val"] = $.trim($("#"+elem["node"]).val()); return new RegExp(this.o.regx["phoneNumber"]).test(elem["val"]); }, // 电话号码(020123456、020-123456、0755123456、0755-123456、755-123456-1234) tel:function(elem){ elem["val"] = $.trim($("#"+elem["node"]).val()); return new RegExp(this.o.regx["tel"]).test(elem["val"]); }, // 电子邮箱地址,\w 英文字母、数字、下划线 email:function(elem){ elem["val"] = $.trim($("#"+elem["node"]).val()); return new RegExp(this.o.regx["email"]).test(elem["val"]); }, // 邮政编码 postCode:function(elem){ elem["val"] = $.trim($("#"+elem["node"]).val()); return new RegExp(this.o.regx["postCode"]).test(elem["val"]); }, // 验证码 validCode:function(elem){ elem["val"] = $.trim($("#"+elem["node"]).val()); return new RegExp(this.o.regx["validCode"]).test(elem["val"]); }, // 密码,必须包含字母和数字 password:function(elem){ elem["val"] = $.trim($("#"+elem["node"]).val()); if(!new RegExp(this.o.regx["password"]).test(elem["val"])){ return false; }else{ if($("#"+$("#"+elem["node"]).attr("refId")).length!=0){ $("#"+$("#"+elem["node"]).attr("refId")).blur(); } return true; } }, password2:function(elem){ elem["val"] = $("#"+elem["node"]).val(); var pwd = $("#"+$("#"+elem["node"]).attr("refId")).val(); return pwd==elem["val"]; }, // 手机号码或电子邮箱 mobilePhoneAndEmail:function(elem){ // var rules = elem["type"].split(","); elem["val"] = $.trim($("#"+elem["node"]).val()); if(this.mobilePhone(elem)){ return true; }else{ if(this.email(elem)){ return true; }else{ return false; } } }, // 字符长度限制 range:function(elem){ elem["val"] = $.trim($("#"+elem["node"]).val()); var len = elem["val"].match(/[^ -~]/g)==null?elem["val"].length/2:(elem["val"].length-elem["val"].match(/[^ -~]/g).length)/2+elem["val"].match(/[^ -~]/g).length; return len >= parseInt($("#"+elem["node"]).attr("min")) && len <= parseInt($("#"+elem["node"]).attr("max")); }, // 至少 charMin:function(elem){ elem["val"] = $.trim($("#"+elem["node"]).val()); var len = elem["val"].match(/[^ -~]/g)==null?elem["val"].length:elem["val"].length+elem["val"].match(/[^ -~]/g).length; return len >= parseInt($("#"+elem["node"]).attr("min")); }, // 最多 charMax:function(elem){ elem["val"] = $.trim($("#"+elem["node"]).val()); var len = elem["val"].match(/[^ -~]/g)==null?elem["val"].length:elem["val"].length+elem["val"].match(/[^ -~]/g).length; return len <= parseInt($("#"+elem["node"]).attr("max")); }, // 非空 nonEmpty:function(elem){ elem["val"] = $("#"+elem["node"]).val(); return elem["val"].trim() != ""; }, // empty:function(elem){ elem["val"] = $("#"+elem["node"]).val(); return elem["val"].trim() == ""; } }; win.FormValidate = FormValidate; })(window,document,jQuery);
标签:style blog io ar color os sp for on
原文地址:http://www.cnblogs.com/snowbaby-kang/p/4157369.html