/**
 * 验证部分JS 
 * @method 
 * @extend jQuery
 * @author K'
 * @date 2010-03-09
 * @versions 0.1
 * @name jquery.validate.js
 * @explanation 请在使用前引用jQuery.js
 */
String.prototype.replaceAll = function(s1,s2){    
return this.replace(new RegExp(s1,"g"),s2);    
}
jQuery.extend({
	/**
	 * 用途：正则表达式字符串保存
	 * 输入：num:数组下标
	 * 返回：单一正则表达式字符串
	 */
	allExpressions : function(num) {
		var expArr = ["",/* 正在表达式说明 *//** 数组编号 */
		              "^[ ]+$",/* 空串 *//** 1 */
		              "^[-]{0,1}[0-9]{1,}$",/* 数字类型 *//** 2 */
		              "^[0-9]+$",/* 正整数类型 *//** 3 */
		              "^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$",/* 电子邮件地址 *//** 4 */
		              "^[1-9]\\d{4,10}$",/* 4-10位正整数（QQ） *//** 5 */
		              "^[\\w_]{6,20}$",/* 6-20位任意字符 *//** 6 */
		              "^[\\w_]{6,20}$",/* 6-20位任意字符 *//** 7 */
		              "^[\\u0391-\\uFFE5]+$",/* 中文 *//** 8 */
		              "^[A-Za-z]+$",/* 英文 *//** 9 */
		              "^[1][3][0-9]{9}$|^[1][5][0-9]{9}$|^[1][8][0-9]{9}$",/* 手机号码 *//** 10 */
		              "^(([0\\+]\\d{2,3}-?)?(0\\d{2,3})-?)(\\d{7,8})(-(\\d{3,}))?$",/* 固话号码 *//** 11 */
		              "^[a-zA-Z0-9]+$",/* 英文和数字 *//** 12 */
		              "^[0-9]+(\\.?([0-9]{1,2})?)?$",/* 金额（Money） *//** 13 */
		              "^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])(\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])){3}$",/* IP地址 *//** 14 */
		              "(^\\d{15}$)|(^\\d{17}([0-9]|X)$)",/* 身份证号位数及格式 *//** 15 */
		              "^(\\d{6})(\\d{4})(\\d{2})(\\d{2})(\\d{3})([0-9]|X)$",/* 18位身份证号格式 *//** 16 */
		              "^[a-zA-Z0-9\\u0391-\\uFFE5]+$"/* 字母/数字/汉字 *//** 17 */
		              ,"^((https|http|ftp|rtsp|mms)?://)?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?(([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-z_!~*'()-]+\.)*([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\.[a-z]{2,6})(:[0-9]{1,4})?((/?)|(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$"
		              ];
		return (num > 0 && num < expArr.length) ? expArr[num] : "";
	},
	/**
	 * 用途：编译正则表达式（字符串转换正则表达式）
	 * 输入：num:数组下标
	 * 返回：正则表达式
	 */
	getRegExp : function(num) {
		return new RegExp(jQuery.allExpressions(num));
	},
	checkUrl : function(url) {
		return jQuery.getRegExp(18).test(url);
	},
	/**
	* 用途：检查输入字符串是否为空或者全部都是空格 
	* 输入：str 
	* 返回：如果全是空返回true,否则返回false 
	*/
	isNull : function(str) {
		return (str === "") ? true : jQuery.getRegExp(1).test(str);
	},
	/**
	* 用途：检查输入对象的值是否符合整数格式
	* 输入：str 输入的字符串
	* 返回：如果通过验证返回true,否则返回false
	*/
	isInteger : function(str) {
		return jQuery.getRegExp(2).test(str);
	},
	/**
	* 用途：检查输入字符串是否符合正整数格式 
	* 输入：str：字符串 
	* 返回：如果通过验证返回true,否则返回false 
	*/
	isNumber : function(str) {
		return jQuery.getRegExp(3).test(str);
	},
	/** 
	* 用途：检查输入的Email信箱格式是否正确 
	* 输入：str：字符串 
	* 返回：如果通过验证返回true,否则返回false 
	*/ 
	checkEmail : function(str) {
		return jQuery.getRegExp(4).test(str);
	},
	/**
	* 用途：检查输入的QQ是否正确
	* 输入：str:字符串
	* 返回：如果通过验证放回true,否则返回false
	*/
	checkQQ : function(str) {
		return jQuery.getRegExp(5).test(str);
	},
	/**
	* 用途：检查输入的用户名是否正确(6到20位)
	* 输入：str:字符串
	* 返回：如果通过验证放回true,否则返回false
	*/
	checkUname : function(str) {
		return jQuery.getRegExp(6).test(str);
	},
	/**
	* 用途：检查输入的密码是否正确(6到20位)
	* 输入：str:字符串
	* 返回：如果通过验证放回true,否则返回false
	*/
	checkUpass : function(str) {
		return jQuery.getRegExp(7).test(str);
	},
	/**
	* 用途：检查输入的是否全是中文
	* 输入：str:字符串
	* 返回：如果通过验证放回true,否则返回false
	*/
	checkChinese : function(str) {
		return jQuery.getRegExp(8).test(str);
	},
	/**
	* 用途：检查输入的是否全是英文
	* 输入：str:字符串
	* 返回：如果通过验证放回true,否则返回false
	*/
	checkEnglish : function(str) {
		return jQuery.getRegExp(9).test(str);
	},
	/**
	* 用途：检查输入的手机是否正确
	* 输入：str:字符串
	* 返回：如果通过验证放回true,否则返回false
	*/
	checkMobile : function(str) {
		return jQuery.getRegExp(10).test(str);
	},
	/**
	* 用途：检查输入的电话是否正确
	* 输入：str:字符串
	* 返回：如果通过验证放回true,否则返回false
	*/
	checkPhone : function(str) {
		return jQuery.getRegExp(11).test(str);
	},
	/**
	 * 用途：检查输入的字符串是否是数字和字母
	 * 输入：str:字符串
	 * 返回：如果通过验证放回true,否则返回false
	 */
	checkNumAndStr : function(str) {
		return jQuery.getRegExp(12).test(str);
	},
	/**
	* 用途：检查输入的金额是否正确
	* 输入：str:字符串
	* 返回：如果通过验证放回true,否则返回false
	*/
	checkMoney : function(str) {
		return jQuery.getRegExp(13).test(str);
	},
	/**
	* 用途：检查输入的IP是否正确
	* 输入：str:字符串
	* 返回：如果通过验证放回true,否则返回false
	*/
	checkIp : function(str) {
		return jQuery.getRegExp(14).test(str);
	},
	/**
	* 用途：检查输入的身份证是否正确
	* 输入：str:字符串
	* 返回：如果通过验证放回true,否则返回false
	*/
	isIdCardNo : function(str) {
		str = str.toUpperCase();
		if(!jQuery.getRegExp(15).test(str)){
			return false;
		}
		var len;
		len = str.length;
		if(len == 15) {
			return false;
		}
		if(len == 18) {
			var arrSplit = str.match(jQuery.getRegExp(16));
			var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
			var bGoodDay;
			bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
			if(!bGoodDay) {
				return false;
			} else {
				var valnum;
				var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
				var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
				var nTemp = 0, i;
				for(i = 0; i < 17; i ++) {
					nTemp += str.substr(i, 1) * arrInt[i];
				}
				valnum = arrCh[nTemp % 11];
				if (valnum != str.substr(17, 1)) {
					return false;
				}
				return true;
			}
		}
		return false;
	},
	/**
	* 用途：检查输入的是否是字母数字和汉字
	* 输入：str:字符串
	* 返回：如果通过验证放回true,否则返回false
	*/
	isNumStrHan : function(str) {
		return jQuery.getRegExp(17).test(str);
	}
})
