//字符串函数集
//伍德祥
//2005-1-4增加新功能
//2005-12-2 增加新功能
//2005-11-29

//2005-1-4
//大概计算一个字符串的在屏幕上显示的长度
function GetTextLength(sText,iSpacing,iCharLen)
{
	if(sText==null)
	{
		return 0;
	}
	if(iSpacing==null)
	{
		iSpacing=0;
	}
	if(iCharLen==null)
	{
		iCharLen=12;
	}
	var iCount=0;
	var iLen=0;
	var oRegExpCN=/\u4E00-\u9FA5/g;
	while(iCount<sText.length)
	{
		if(sText.charCodeAt(iCount)>=19968)
		{
			iLen+=iCharLen;
		}
		else
		{
			iLen+=iCharLen*0.6;
		}
		iLen+=iSpacing;
		iCount++;
	}
	return parseInt(iLen);
}
//2005-12-2
//是否是数字
function IsPositiveNumber(sNumber,iMin,iMax){
	var regNumber=/^[1-9]{1}\d{0,}$/;
	if(regNumber.test(sNumber)==true){
		if((sNumber>=iMin||iMin==null)&&(iMax>=sNumber||iMax==null)){
			return true;
		}
		else{
			return false
		}
	}
	else{
		return false;
	}
}
function IsNumber(sNumber,iMin,iMax){
	var regNumber=/^(\-){0,1}([1-9]\d{0,}){1}(\.\d{1,}){0,1}$/;
	if(regNumber.test(sNumber)==true){
		if((sNumber>=iMin||iMin==null)&&(iMax>=sNumber||iMax==null)){
			return true;
		}
		else{
			return false
		}
	}
	else{
		return false;
	}
}

//是否符合姓名规则
function IsName(sName){
	var regName=/^(([\u4E00-\u9FA5|a-zA-z]){1,10}\.([\u4E00-\u9FA5|a-zA-Z]){1,10})|([\u4e00-\u9fa5]{2,20})$/g;
	if(!regName.test(sName)){
		return false;
	}
	return true;
}
//获取字符串的长度,汉字算作两个
function GetLengthByByte(sText){
	var sNewText=new String(sText);
	var regText=/[\u4E00-\uFFFF]/g;
	sNewText=sNewText.replace(regText,"00");
	return sNewText.length;
}

//是否符合帐号规则
function IsAccount(sAccount,iMinLen,iMaxLen){
	var regAccount=/^[a-z\.]{1,}\w{0,}$/ig;
	if(regAccount.test(sAccount)!=true){
		regAccount=/^\d{1,}$/ig;
		if(regAccount.test(sAccount)!=true)
		{
			return false;
		}
	}
	if(iMinLen==null){
		iMinLen=4;
	}
	if(GetLengthByByte(sAccount)<iMinLen){
		return false;
	}
	if(iMaxLen==null){
		iMaxLen=20;
	}
	if(GetLengthByByte(sAccount)>iMaxLen){
		return false;
	}
	return true;
}
//获取密码强度
function GetPwdLevel(sKey,sAccount,iMinLen,iMaxLen){
	var iLevel=0;
	var regPwd;
	//32-47(标点字符)
	regPwd=/[\u0020-\u002F]{1,}/g;
	if(regPwd.test(sKey)==true){
		iLevel++;
	}
	//48-57(数字0-9)
	regPwd=/[\u0030-\u0039]{1,}/g;
	if(regPwd.test(sKey)==true){
		iLevel++;
	}
	//58-64(运算及标点字符)
	regPwd=/[\u003A-\u0040]{1,}/g;
	if(regPwd.test(sKey)==true){
		iLevel++;
	}
	//65-90(大写字母)
	regPwd=/[\u0041-\u005A]{1,}/g;
	if(regPwd.test(sKey)==true){
		iLevel++;
	}
	//91-96
	regPwd=/[\u005B-\u0060]{1,}/g;
	if(regPwd.test(sKey)==true){
		iLevel++;
	}
	//97-122(小写字母)
	regPwd=/[\u0061-\u007A]{1,}/g;
	if(regPwd.test(sKey)==true){
		iLevel++;
	}
	//123-127
	regPwd=/[\u007B-\u007F]{1,}/g;
	if(regPwd.test(sKey)==true){
		iLevel++;
	}
	//128-160
	regPwd=/[\u0080-\u00A0]{1,}/g;
	if(regPwd.test(sKey)==true){
		iLevel++;
	}
	//161-191
	regPwd=/[\u00A1-\u00BF]{1,}/g;
	if(regPwd.test(sKey)==true){
		iLevel++;
	}
	//192-221
	regPwd=/[\u00C0-\u00DD]{1,}/g;
	if(regPwd.test(sKey)==true){
		iLevel++;
	}
	//222-255
	regPwd=/[\u00DE-\u00FF]{1,}/g;
	if(regPwd.test(sKey)==true){
		iLevel++;
	}
	//中文字符
	regPwd=/[\u4E00-\u9FA5]{1,}/g;
	if(regPwd.test(sKey)==true){
		iLevel++;
	}
	//全角字符
	regPwd=/[\uFF00-\uFFFF]{1,}/g;
	if(regPwd.test(sKey)==true){
		iLevel++;
	}
	//加权
	if(iLevel>=3){
		iLevel++;
	}
	if(iMinLen==null){
		iMinLen=6;
	}
	if(GetLengthByByte(sKey)>=iMinLen){
		iLevel++;
	}
	if(iMaxLen==null){
		iMaxLen=20;
	}
	if(GetLengthByByte(sKey)>=(iMinLen+iMaxLen)/2){
		iLevel++;
	}
	if(!(GetLengthByByte(sAccount)>0&&(sKey.indexOf(sAccount)>=0||sAccount.indexOf(sKey)>=0))){
		iLevel++;
	}
	if(GetLengthByByte(sKey)>iMaxLen){
		iLevel=0;
	}
	return iLevel;
}
//是否是网址
function IsUrl(sUrl){
	var regUrl=/^http\:\/\/.+$/gi;
	return regUrl.test(sUrl);
}
//是否是日期
function IsDate(sDate){
	var regDate=/^(19|20)[0-9]{2}[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$/;
	return regDate.test(sDate);
}
//是否是电子邮件
function IsEmail(sEmail){
	var regEmail=/^[a-z]{1}[\w\.\-_]{0,30}@[\w\-]{1,50}\.(\w{2,3})(\.\w{2,3}){0,1}$/;
	return regEmail.test(sEmail);
}
//是否是手机号码
function IsMobile(sMobile){
	var regMobile=/^13[0-9]\d{8}$/g;
	return regMobile.test(sMobile);
}
//是否是电话号码
function IsTel(sTel){
	var regTel=/^0\d{2,3}[\-|\s][1-9]\d{6,7}([\s#-][1-9]\d{0,3}){0,1}$/g;
	return bIsTel=regTel.test(sTel);
}
//是否是IP地址,如果是,返回对应数字,否则返回0
function IPToNum(sIP){
	//var regIP=/(\d{0,3})\.(\d{0,3})\.(\d{0,3})\.(\d{0,3})/g;//原来的正则表达式
	var regIP=/^((1[0-9]{0,2})|([1-9][1-9])|(2[0-4][1-9])|(25[0-5])|([1-9]))\.((1[0-9]{0,2})|([1-9][1-9])|(2[0-4][1-9])|(25[0-5])|([0-9]))\.((1[0-9]{0,2})|([1-9][1-9])|(2[0-4][1-9])|(25[0-5])|([0-9]))\.((1[0-9]{0,2})|([1-9][1-9])|(2[0-4][1-9])|(25[0-5])|([0-9]))$/;
	var bIsIP=regIP.test(sIP);
	var iNum=0;
	if(bIsIP==true){
		iNum=RegExp.$1*Math.pow(256,3)+RegExp.$2*Math.pow(256,2)+RegExp.$3*256+RegExp.$4*1;
	}
	return iNum;
}
//是否是身份证号码
function IsIDNo(sIDNo){
　　var sAreaCode=new String("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 iSum;
　　var sValidateCode=new String("10X98765432");
　　var aryIDNo=new Array();
　　var regIDNo;
　　sIDNo=sIDNo.toUpperCase()
　　aryIDNo=sIDNo.split("");
　　if(sAreaCode.indexOf(sIDNo.substr(0,2))<0){
　　	return false;
	　}
　	switch(sIDNo.length){
　		case 15:
　			if((parseInt(sIDNo.substr(6,2))+1900)%4==0||((parseInt(sIDNo.substr(6,2))+1900)%100==0&&(parseInt(sIDNo.substr(6,2))+1900)%4==0)){
　				regIDNo=/^[1-9][0-9]{5}[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}$/;
　			}
　			else{
　				regIDNo=/^[1-9][0-9]{5}[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}$/;
　			}
　			return regIDNo.test(sIDNo)
　		break;
　		case 18:
　			if( parseInt(sIDNo.substr(6,4))%4==0||(parseInt(sIDNo.substr(6,4))%100==0&&parseInt(sIDNo.substr(6,4))%4==0)){
　				regIDNo=/^[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{
　				regIDNo=/^[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(regIDNo.test(sIDNo)){
　				iSum=(parseInt(aryIDNo[0])+parseInt(aryIDNo[10]))*7+(parseInt(aryIDNo[1])+parseInt(aryIDNo[11]))*9+(parseInt(aryIDNo[2])+parseInt(aryIDNo[12]))*10+(parseInt(aryIDNo[3])+parseInt(aryIDNo[13]))*5+(parseInt(aryIDNo[4])+parseInt(aryIDNo[14]))*8+(parseInt(aryIDNo[5])+parseInt(aryIDNo[15]))*4+(parseInt(aryIDNo[6])+parseInt(aryIDNo[16]))*2+parseInt(aryIDNo[7])*1+parseInt(aryIDNo[8])*6+parseInt(aryIDNo[9])*3;
　				iSum=iSum%11;
　				if(sValidateCode.substr(iSum,1)==aryIDNo[17]){
　					return true;
　				}
　				else{
　				return false;
　				}
　			}
　			else{
　				return false;
　			}
　			break;
　		default:
　			return false;
　			break;
　	}
}