//表达式匹配
function isMatch(reg,str){
	if(isEmpty(str)){
		return false;
	}else{
		return reg.test(str);
	}
}

//是否为空
function isEmpty(str){
	return str.replace(/ /g,"") == "";
}

//是否合法
function isName(str){
	return str.replace(/ /g,"") == "";
}

function getStrLen( sTargetStr ){ 
         var sTmpStr, sTmpChar; 
         var nOriginLen = 0; 
         var nStrLength = 0; 
		 sTmpStr = new String(sTargetStr); 
         nOriginLen = sTmpStr.length; 
         for ( var i=0 ; i < nOriginLen ; i++ ) { 
               sTmpChar = sTmpStr.charAt(i); 
              if (escape(sTmpChar).length > 4) { 
                  nStrLength += 2; 
                 } else if (sTmpChar!='\r') { 
                nStrLength ++; 
              } 
            } 
   return nStrLength; 
}

function doCheckTextarea(textarea,maxLength){
	var nowLength = getStrLen(textarea.value);
	if(nowLength <= maxLength){
		textarea.style.border="1px #063487 solid"; 
		return "不超过【" + maxLength + "】个字符,您已经输入了【"+ nowLength +"】个字符";
	}else{
		textarea.style.border="red 3px double"; 
		return "<font color=darkred>您输入了【"+ nowLength +"】个字符，超出了【" + (nowLength-maxLength) + "】个字符</font>";
	}
}

// 只允许数字和字母，其他的一律替换，使用在onkeyup事件
function onlyNum(){
	event.srcElement.value=event.srcElement.value.replace(/[\D]/g,'');
}


// 只允许数字和字母，其他的一律替换，使用在onkeyup事件
function onlyEnNum(){
	event.srcElement.value=event.srcElement.value.replace(/[\W]/g,'');
}

//剪切板中非数字和英文字符一律替换
function onlyEnNumClipboard(){
	clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''));
}

//空格一律清除
function nonull(str){
	event.srcElement.value=event.srcElement.value.replace(/(^\s*)|(\s*$)/g, '');
}
/*
电话号码的验证
　　(1)电话号码由数字、"("、")"和"-"构成
　　(2)电话号码为3到8位
　　(3)如果电话号码中包含有区号，那么区号为三位或四位
　　(4)区号用"("、")"或"-"和其他部分隔开
　　(5)移动电话号码为11或12位，如果为12位,那么第一位为0
　　(6)11位移动电话号码的第一位和第二位为"13"
　　(7)12位移动电话号码的第二位和第三位为"13"
*/
function isPhone(str) {
	var reg=/(^[0-9]{3,4}\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)/
	if(!reg.test(str)){
		return 	false;
	}
	return true;
}

//日期格式检查
function isDateString(str) {
	var reg=/^\d{4}-[0-1]?\d{1}-[0-3]?\d{1}$/
	return isMatch(reg,str)
}

//用户名4-20个字符，包括（英文字母、数字、下划线），必须以英文字母开头
function isUsername(str){
	if(isEmpty(str)){
		alert("请填写用户名！");
		return false;
	}
	var reg = /^[a-zA-Z][a-zA-Z0-9_]{3,19}$/
	if(!reg.test(str)){
		alert("用户名不符合规范，请重新设定，4-20个字符，包括（英文字母、数字、下划线），必须以英文字母开头！");
		return false;	
	}
	return true;
}

//密码6-20个字符，包括（英文字母、数字）
function isPassword(str){
	if(isEmpty(str)){
		alert("请设置密码！");
		return false;
	}
	var reg = /^[a-zA-Z0-9]{6,20}$/
	if(!reg.test(str)){
		alert("密码不符合规范，请重新设定，6-20个字符，包括（英文字母、数字）！");
		return false;	
	}
	return true;
}

//姓名
function isRealname(str){
	if(str.length >20 || str.length < 2){
		alert("请正确填写姓名！");
		return false; 	
	}
	var reg = /^(\w|[\u4E00-\u9FA5])*$/
	if(!reg.test(str)){
		alert("发现非法字符，请正确填写姓名！");
		return false;	
	}
	return true;
}

//配合ajax名称校验
function isAjaxName(str){
	var reg = /^(\w|[\u4E00-\u9FA5])*$/
	if(!reg.test(str)){
		alert("发现非法字符，请正确填写名称！");
		return false;	
	}
	return true;
}
//电子邮件
function isEmail(str){
	if(str.length > 40){
		return false;
	}
	if(str.indexOf("@") < 0){
		return false;
	}
	if(str.indexOf(".") < 0){
		return false;
	}
	var reg = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
	if(!reg.test(str)){
		return false;	
	}
	return true;
}

//身份证号码
function isIDCode(str){
	var reg =/^[0-9]+$/;
	if(!reg.test(str)){
		return false;	
	}
	
	if(str.length == 15 || str.length == 18){
		return true;
	}else{
		return false;	
	}
}

//邮编
function isPost(str){
	var reg =/^[0-9]{6}$/;
	if(!reg.test(str)){
		return false;	
	}
	return true;
}

//是否是数字，并至少有1位
function isNum(str){
	var reg=/^[0-9]*$/;
	return reg.test(str);
}

//是否是年，并至少有4位
function isYear(str){
	var reg=/^[0-9]{4}$/;
	return reg.test(str);
}
//是否是年，并至少有4位
function isMonth(str){
	if(isNum(str)){
		if(str < 13 && str >0){
			return true;	
		}
	}
	return false;
}
//是否是年，并至少有4位
function isDay(str){
	if(isNum(str)){
		if(str < 32 && str >0){
			return true;	
		}
	}
	return false;
}
//判断是否是IP地址
function isIPAddress (ipAddressString) {
	var reSpaceCheck = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
	var passedTest = false;
   
	if (reSpaceCheck.test(ipAddressString)) {
    	ipAddressString.match(reSpaceCheck);
    	if (RegExp.$1 <= 255 && RegExp.$1 >= 0 
      		&& RegExp.$2 <= 255 && RegExp.$2 >= 0 
      		&& RegExp.$3 <= 255 && RegExp.$3 >= 0 
      		&& RegExp.$4 <= 255 && RegExp.$4 >= 0) {
     		passedTest = true;
    	}
   	}
   	if (!passedTest) {
    	return false;
   	}
   	return true;
}

//只允许英文，数字和汉字的混合，不允许空格或者其他符号
function isName(str){
	var reg = /^(\w|[\u4E00-\u9FA5]|-|,)*$/; 
	if(!reg.test(str)){
		return false;	
	}
	return true;
}

//链接地址校验
function isUrl(str_url){
	if(isEmpty(str_url)){
		return true;
	}else{
		var strRegex = "^((https|http|ftp|rtsp|mms)?://)" 
	  		+ "?(([0-9a-zA-Z_!~*'().&=+$%-]+: )?[0-9a-zA-Z_!~*'().&=+$%-]+@)?" //ftp的user@ 
	        + "(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP形式的URL- 199.194.52.184 
	        + "|" // 允许IP和DOMAIN（域名）
	        + "([0-9a-zA-Z_!~*'()-]+\.)*" // 域名- www. 
	        + "([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z]\." // 二级域名 
	        + "[a-zA-Z]{2,6})" // first level domain- .com or .museum 
	        + "(:[0-9]{1,4})?" // 端口- :80 
	        + "((/?)|" // a slash isn't required if there is no file name 
	        + "(/[0-9a-zA-Z_!~*'().;?:@&=+$,%#-]+)+/?)$"; 
	  	var re=new RegExp(strRegex); 
	  	if (re.test(str_url)){
	   		return (true); 
	  	}else{ 
	  		return (false); 
	   }
	}
}


/** 表单验证方法。：[^%&',;=?$x22]+”
 * 使用此方法需为验证目标指定如下属性：
 * title 	错误提示时的标题
 * vflag 	验证识别标志
 * vtypes 	验证方式，支持的方式有
 *			null 	是否填写验证
 *			number	是否是数字验证
 *			length:num			输入字符长度验证，如：length:200
 *			mail	是否是电子邮件
 *			idcode	是否是身份证
 *			ip		是否是IP地址
 *			post	是否是邮政编码
 * tabidx	当前验证目标所属标签索引，该属性只有在多标签选择验证的情况下有效，同时需要覆盖实现switchTab(idx)方法
 *
 * @param formObj 	对象 	需要验证的表单对象
 * @param vflag  	字符串  	验证识别标志，用于识别需要验证的目标表单标签对象。
 * @return true or false	验证结果
 * 例如：
 * <script language="javascript">
 * 	function onSubmit(){
 * 		return check(document.all.form1,"TitleNews");
 * 	}
 * </script>
 * <form name="form1">
 * <input title="标题新闻" vflag="TitleNews" vtypes="null,length:200" tabidx="1">
 * </form>：“[^%&',;=?$x22]+”
**/
function check(formObj,vflag){
	var size = formObj.length;
	var uObject,uValue, uVflag,uVtypes,uVtypeNum;
	for(i=0;i<size;i++){
		uObject 	= formObj(i);
		uVflag		= uObject.vflag;
		if(uVflag && uVflag.indexOf(vflag) != -1){
			uValue		= uObject.value;
			uVtypes  	= uObject.vtypes.split(",");
			uVtypeNum 	= uVtypes.length;
			for(j=0;j<uVtypeNum;j++){
				if(uVtypes[j] == "null" && (isEmpty(uValue) || uValue == "-1")){
					return alertError(formObj,uObject,"必需填写！");
				}else if(uVtypes[j] == "number" && !isNum(uValue)){
					return alertError(formObj,uObject,"必需填写数字！");
				}else if(uVtypes[j].indexOf("length:") != -1 && getStrLen(uValue) > uVtypes[j].split(":")[1]){
					return alertError(formObj,uObject,"最多允许填写 " + uVtypes[j].split(":")[1] + " 个字符！");
				}else if(uVtypes[j] == "mail" && !isEmail(uValue)){
					return alertError(formObj,uObject,"输入的电子邮件格式错误！");
				}else if(uVtypes[j] == "idcode" && !isIDCode(uValue)){
					return alertError(formObj,uObject,"输入的身份证号码格式错误！");
				}else if(uVtypes[j] == "ip" && !isIPAddress(uValue)){
					return alertError(formObj,uObject,"输入的IP地址格式错误！");
				}else if(uVtypes[j] == "post" && !isPost(uValue)){
					return alertError(formObj,uObject,"输入的邮政编码格式错误！");
				}else if(uVtypes[j] == "name" && !isName(uValue)){
					return alertError(formObj,uObject,"输入信息包含非法字符！");
				}else if(uVtypes[j] == "url" && !isUrl(uValue)){
					return alertError(formObj,uObject,"输入的链接地址格式错误！");
				}else if(uVtypes[j].indexOf("border:") != -1 && uObject.style.border.indexOf(uVtypes[j].split(":")[1]) != -1){
					return alertError(formObj,uObject,"输入信息错误！");
				}
			}
		}
	}
	return true;
}

//表单验证辅助方法，错误信息报警
function alertError(formObj,obj,msg){
	if(obj.tabidx)switchTab(obj.tabidx);
	window.alert("【警告】表单提交信息错误！\n\n " + obj.title + msg);
	if(obj.type == "hidden" ||　obj.style.display == "none"){
		formObj.focus();
	}else{
		obj.focus();
	}
	return false;
}

// 表单验证辅助方法。
// 多标签有隐藏表单标签，并需选择验证时需要覆盖实现此方法
function switchTab(idx){}
