jquery validate自定义扩展实例,以及一些常用验证

/** 注册验证类 **/
var RegisterValidate = {
	//每个页面仅仅加载一次,这是一个标志	
	isGetUrlPara	:	0,
	
	currentGame		:	"bw",
	defaultGame : "_bw",
	
	/** 一些链接 **/
	dHttpUrl : "http://d.bw.zqgame.com",
	ajaxUrl : "http://d.bw.zqgame.com/register/quick",
	userNameRemote : "http://d.bw.zqgame.com/register/checkname", // 异步请求校验重复性路径
	authImageUrl : "http://d.bw.zqgame.com/register/captcha-image?",//验证码
	
	//有多个验证码需要存在时,请在页面自动刷新验证码,初始化加载时仅仅加载第一个初始化注册的验证码
	/**
	 * 针对同一个session(页面)需要两个验证码
	 */
	authImageFlag	:	false,
	
	defaultValidate	:	{
		/** 默认的提示信息 **/
		usernameRequiredMsg : "没有填写用户名",
		usernameRegexusernameMsg : "只能输入字符串和数字",
		usernameMinlengthMsg : "用户名不能小于{0}个字符",
		usernameRemoteMsg : "用户名已经被注册",
		passwordRequiredMsg : "没有填写密码",
		passwordMinlengthMsg : "密码最少{0}个字符",
		password_confirmationRequiredMsg : "没有确认密码",
		password_confirmationEqualToMsg : "两次输入密码不一致嘛",
		captchaEqualToMsg : "验证码必填",
		captchaMaxlengthMsg : "验证码最多{0}个字符",
		licenseRequiredMsg : "是否同意服务条款",
		rightEmailMsg : "请输入正确格式邮箱",
		emailRequiredMsg : "请输入邮箱地址",
		notEqualNameAndPaswd : "用户名和密码不能相同!",
		realNameRequiredMsg : "用户名不能为空",
		realNameIsRealNameMsg : "输入中文姓名",
		cardRequiredMsg : "身份证号码不能为空",
		carIsCardMsg : "身份证号码非法",
		
		/** 默认的验证规则 **/
		userNameMinLength : 6,
		passMinLength : 6,
		captMaxLength : 4
	},
	
	/** 显示验证码 **/
	getValidateServlets : function(autchImageId) {
		document.getElementById(autchImageId).src = RegisterValidate.authImageUrl + Math.random();
	},
	/** 身份证验证 **/
	checkIdcard : function(idcard){
	    idcard = idcard.toUpperCase();
	    var Errors=new Array("","身份证号码位数不对","身份证号码出生日期超出范围或含有非法字符","身份证号码校验错误","身份证地区非法","身份证号码不受支持,请输入18位身份证号码或升级你的身份证号码");
	    var area={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"};
	    var idcard,Y,JYM;
	    var S,M;
	    var idcard_array = new Array();
	    idcard_array = idcard.split("");
	    if (area[parseInt(idcard.substr(0,2))]==null) 
	    	return false;
	    switch(idcard.length){
		    case 15:
		    	return false;
		    	break;
		    case 18:
		    	if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6,4)) % 100 == 0 && parseInt(idcard.substr(6,4))%4 == 0 )){
		    		ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;// 闰年出生日期的合法性正则表达式
		    	} else  {
		    		ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;// 平年出生日期的合法性正则表达式
		    	}
		    	if(ereg.test(idcard)) {
		    		S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7 + (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9 + (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10 + (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5 + (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8 + (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4 + (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2 + parseInt(idcard_array[7]) * 1 + parseInt(idcard_array[8]) * 6 + parseInt(idcard_array[9]) * 3 ;
		    		Y = S % 11;
		    		M = "F";
		    		JYM = "10X98765432";
		    		M = JYM.substr(Y,1);
			        if(M == idcard_array[17])
			        	return true;
			        else
			        	return false;
		    	} else
		    		return false;
		    	break;
		    default:
		    	return false;
		      	break;
	    }
	},
	//初始化校验规则
	initValidata : function() {
		/**
		 * 自定义一些正则表达式校验规则 这个是登录名通行证注册时,过滤中文的
		 */
		jQuery.validator.addMethod("notChina", function(value, element){
			var notChinaReg = /^([a-zA-Z0-9]+)$/;
			return this.optional(element) || (notChinaReg.test(value));
		}, RegisterValidate.defaultValidate.usernameRegexusernameMsg);

		jQuery.validator.addMethod("notEqualTo", function(value, element, param) {
		  return value != $(param).val();
		}, $.validator.format(RegisterValidate.defaultValidate.notEqualNameAndPaswd));

		/**
		 * 身份证号码验证   
		 */
		jQuery.validator.addMethod("isIdcardno", function(value, element) {
		  return this.optional(element) || RegisterValidate.checkIdcard(value);   
		}, RegisterValidate.defaultValidate.carIsCardMsg);

		/**
		 * 真实姓名   
		 */
		jQuery.validator.addMethod("isRealName", function(value, element){
		  var realNameReg = /^[\u4E00-\u9FA5\uFE30-\uFFA0]+$/g;
		  return this.optional(element) || (realNameReg.test(value));
		}, RegisterValidate.defaultValidate.realNameIsRealNameMsg);
	},
	//获取一个实例
	getInstance		:	function(_currentGame ,settings){
		/** 回调 start **/
		var defaultAjaxErrorMethod = function(data, textStatus) {
			alert(data.message);
		};
		
		var defaultAjaxError = function(XMLHttpRequest, textStatus, errorThrown) {
			try{
				var e = jQuery.parseJSON(XMLHttpRequest.responseText);
				alert(e.message);
			}catch(e){
				alert("提示:[服务器出错]");
			}
		};
		
		var defaultAjaxCalbackMethod = function(data, textStatus) {
			alert("恭喜您注册成功!");
			$("input").val("");
		};
		
		var defaultValiSucceMethod = function(label) {
			label.remove();
		};
		
		var validateErrorElement = {};
		var defaultValiErrorMethod = function(error, element) {
			$("#errorShowId").empty();
			error.appendTo($("#errorShowId"));
			var msg = $("#errorShowId").text();

			var name = element.attr("name");
			validateErrorElement["\"" + name + "\""] = msg;
			
			if(msg != null && msg != ""){
				$(validationData.errorLabel).css("color", "red").text(msg);
				return;
			}
			
			var havaError = false;
			for (var one in validateErrorElement) {
				if(validateErrorElement[one] != null && validateErrorElement[one] != ""){
					$(validationData.errorLabel).css("color", "red").text(validateErrorElement[one]);
					havaError=true;
					return;
				}
		    }
			
			if(!havaError){
				$(validationData.errorLabel).text("");
			}
		};
		
		/** 回调 end **/
		
		/** 一些默认值 **/
		var validationData = {
			
			isSubmit	:	false,	//初始时是否提交
			
			/** 各种id **/
			regFormId : "#registgerFormId", // 默认注册表单ID
			passwordId : "#passwordId",// 密码输入框Id 检测两次输入密码是否一致
			userName : "input[name='username']", // 选择通行证注册与选择邮箱注册时切换输入框内容
			submitObj : ".regBtn",// 定义提交按钮为图片或其他非input按钮时候用到的
			autchImageId : "imagedid",	//验证码
			errorLabel : "#textInfo",	//默认错误信息提示

			rewriteUrl:false,
			rewriteReCommand:false,
			
			/** 各种回调 **/
			ajaxErrorMethod:defaultAjaxErrorMethod,
			ajaxError:defaultAjaxError,
			ajaxCalbackMethod:defaultAjaxCalbackMethod,
			valiSucceMethod:defaultValiSucceMethod,
			valiErrorMethod:defaultValiErrorMethod,
			
			validate	:	RegisterValidate.defaultValidate
		};
		
		/** 初始化数据 start **/
		//初始化常量,若settings不为空,则会合并validationData
		validationData = jQuery.extend(true, validationData, settings);	
		
		RegisterValidate.currentGame = _currentGame;
		if(!validationData.rewriteUrl){
			/** 初始化全局变量 **/
			//RegisterValidate.defaultGame = "_" + _currentGame;
			RegisterValidate.dHttpUrl = "http://d." + _currentGame + ".zqgame.com";
			RegisterValidate.ajaxUrl = "http://d." + _currentGame + ".zqgame.com/register/quick";
			RegisterValidate.userNameRemote = "http://d." + _currentGame + ".zqgame.com/register/checkname"; // 异步请求校验重复性路径
			RegisterValidate.authImageUrl = "http://d." + _currentGame + ".zqgame.com/register/captcha-image?";//验证码
		}
		
		if(!validationData.rewriteReCommand){
			RegisterValidate.defaultGame = "_" + _currentGame;
		}

		//显示验证码
		if(!RegisterValidate.authImageFlag){
			RegisterValidate.authImageFlag = true;
			$("#" + validationData.autchImageId).attr("src", RegisterValidate.authImageUrl + Math.random());
		}
		
		/** 验证用户名重复性参数 **/
		var checkUserNameRemoteMethod = {
			url : RegisterValidate.userNameRemote, // 后台处理程序
			type : "get", // 数据发送方式
			dataType : "jsonp", // 接受数据格式
			username : function() {
				return $(validationData.regFormId + " " + validationData.userName).val();
			},
			error : function() {
				alert("服务器忙,请重试!");
			}
		};
		/** 初始化数据 end **/
		
		/** 获得推广来源 部分 begin  **/
		var getCookie = function(name) {
			var arr = document.cookie.match(new RegExp("(^| )" + name
					+ "=([^;]*)(;|$)"));
			if (arr != null)
				return decodeURI(arr[2]);
			return "";
		};
		
		// 两个参数,一个是cookie的名子,一个是值
		var setCookie = function(name, value) {
			var Days = 30; // 此 cookie 将被保存 30小时
			var exp = new Date(); // new Date("December 31, 9998");
			exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000);
			document.cookie = name + "=" + escape(value) + ";expires="
					+ exp.toGMTString() + ";domain=.zqgame.com";
		};
		  
		var ad = '';// 广告来源
		var purl = '';// 来源url
		var pimgid = '';// 来源图片
		var getUrlPara = function(defaultGame) {
			purl = document.referrer;
			if (purl == null || purl == '') {
				purl = 'rw';
			}
			var firstz = purl.indexOf('://');
			if (firstz > -1) {
				purl = purl.substring(firstz + 3, purl.length - 1);
			}
			var endz = purl.indexOf('/');
			if (endz > -1) {
				purl = purl.substring(0, endz);
			}
			purl = purl + defaultGame;

			setCookie("urlf", purl);
			if (window.location.search.indexOf("?") >= 0) {
				var paras = window.location.search.substr(1).split("&");
				for ( var i = 0; i < paras.length; ++i) {
					paras[i] = paras[i].toLowerCase();
					if (paras[i].indexOf("ad=") == 0) {
						ad = paras[i];
						if (ad.substr(3) != null && ad.substr(3) != "") {
							setCookie("ad", ad.substr(3));
						}
					}
					// add daly 2010.6.7
					if (paras[i].indexOf("imgid=") == 0) {
						pimgid = paras[i].toLowerCase().substr(6);
					}
				}
			}
			// add daly 2010.6.1
			if (ad == "" || ad == null) {
				ad = "ad=" + getCookie("ad");
			}
		};
		/** 获得推广来源 部分 end  **/
		
		/** 回调之前调用 start  **/
		/**
		 * type
		 * 		ajaxError
		 * 		ajaxCalback
		 * 		ajaxCalbackError
		 * 参数:
		 * 		arguments[0]	:	回调类型(上面二选一)
		 * 		其余参数根据上面四种默认回调参数类型顺序获取
		 * @returns
		 */
		var defaultAjaxPreCallbak = function() {
			var type = arguments[0];
			
			if(type == "ajaxError"){
				validationData.ajaxError(arguments[1], arguments[2], arguments[3]);
			}else if(type == "ajaxCalback"){
				validationData.ajaxCalbackMethod(arguments[1], arguments[2]);
			}else if(type == "ajaxCalbackError"){
				validationData.ajaxErrorMethod(arguments[1], arguments[2]);
			}
			//刷新验证码
			RegisterValidate.getValidateServlets(validationData.autchImageId);
		};
		
		var defaultValiSuccePreCallbak = function(label) {
			validationData.valiSucceMethod(label);
		};
		
		var defaultValiErrorPreCallbak = function(error, element) {
			validationData.valiErrorMethod(error, element);
		};
		
		/** 回调之前调用 end  **/
		
		//检验
		var validateForm = function(){
			$(validationData.regFormId).validate({
				onkeyup : false,
				rules : {
					username : {
						required : true,
						notChina : true,
						minlength : validationData.validate.userNameMinLength,
						remote : checkUserNameRemoteMethod
					},
					password : {
						required : true,
						minlength : validationData.validate.passMinLength,
						notEqualTo : validationData.userName
					},
					password_confirmation : {
						required : true,
						equalTo : validationData.passwordId
					},
					realName : {
						required : true,
						isRealName : true
					},
					card : {
						required : true,
						isIdcardno : true
					},
					captcha : {
						required : true,
						maxlength : validationData.validate.captMaxLength
					},
					license : {
						required : true
					}
				},
				messages : {
					username : {
						required : validationData.validate.usernameRequiredMsg,
						notChina : validationData.validate.usernameRegexusernameMsg,
						minlength : jQuery.format(validationData.validate.usernameMinlengthMsg),
						remote : validationData.validate.usernameRemoteMsg
					},
					password : {
						required : validationData.validate.passwordRequiredMsg,
						minlength : jQuery.format(validationData.validate.passwordMinlengthMsg)
					},
					password_confirmation : {
						required : validationData.validate.password_confirmationRequiredMsg,
						equalTo : validationData.validate.password_confirmationEqualToMsg
					},
					realName : {
						required : validationData.validate.realNameRequiredMsg,
						isRealName : validationData.validate.realNameIsRealNameMsg
					},
					card : {
						required :validationData.validate.cardRequiredMsg,
						isIdcardno : validationData.validate.carIsCardMsg
					},
					captcha : {
						required : validationData.validate.captchaEqualToMsg,
						maxlength : jQuery.format(validationData.validate.captchaMaxlengthMsg)
					},
					license : {
						required : validationData.validate.licenseRequiredMsg
					}
				},
				errorPlacement : defaultValiErrorPreCallbak,
				success : defaultValiSuccePreCallbak
			});
		
			/**
			 * 图片做submit提交
			 */
			$(validationData.submitObj).click(function() {
				$(validationData.regFormId).submit();
				return false;
			});
			
			if(validationData.isSubmit){
				$(validationData.regFormId).submit();
			}
		};
		
		/** 提交表单 **/
		var validatorRegisterForm = function() {
			$("body").after("<span id='errorShowId' style='display:none;'></span>");
			
			//定义默认的ajax请求参数
			var ajaxOptions = {
				async : false,
				url : RegisterValidate.ajaxUrl,
				type : "get",
				dataType : "jsonp",
				// crossDomain: true,
				success : function(data, textStatus) { // 注册请求回调处理方法
					if (data.status == "success") {
						defaultAjaxPreCallbak("ajaxCalback", data, textStatus);
					} else {
						defaultAjaxPreCallbak("ajaxCalbackError", data, textStatus);
					}
				},
				error : function(XMLHttpRequest, textStatus, errorThrown) {
					defaultAjaxPreCallbak("ajaxError", XMLHttpRequest, textStatus, errorThrown);
				}
			};

			/**
			 * 更改validator默认的form提交方式为异步ajax并执行提交操作
			 */
			$.validator.setDefaults({
				submitHandler : function(form) {
					var param = $(validationData.regFormId).serialize();
					param += "&szSrc=" + purl + "&" + ad + "&spreadImageId="
							+ pimgid;
					ajaxOptions = jQuery.extend(ajaxOptions, {
						data : param
					});
					$.ajax(ajaxOptions);
				}
			});
		};
		
		/** 加载时执行 **/
		if(RegisterValidate.isGetUrlPara == 0){
			getUrlPara(RegisterValidate.defaultGame);
			RegisterValidate.isGetUrlPara += 1;
		}
		
		/** 验证码绑定事件 **/
		$("#" + validationData.autchImageId).click(function(){
			//刷新验证码
			RegisterValidate.getValidateServlets(validationData.autchImageId);
		}).mouseover(function(){
			$(this).css("cursor", "pointer");
		});
		
		RegisterValidate.initValidata();
		validatorRegisterForm();
		validateForm();
	}
};
// qq验证 
	jQuery.validator.addMethod("qq", function(value, element) { 
		var tel = /^[1-9]\d{4,9}$/; 
		return this.optional(element) || (tel.test(value)); 
	}, "qq号码格式错误");
	
	// 手机号码验证 
	jQuery.validator.addMethod("tel", function(value, element) { 
		var length = value.length; 
		var mobile = /^(13\d{9})|(14\d{9})|(15\d{9})|(17\d{9})|(18\d{9})$/g; 
		return this.optional(element) || (length == 11 && mobile.test(value)); 
	}, "手机号码格式错误");


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值