//字符串函数集
//伍德祥
//2006-7-9
//2006-2-7 增加新功能
//2006-1-18 增加新功能
//2006-1-4 增加新功能
//2005-12-2 增加新功能
//2005-11-29

//半角转全角
function ConvertToSBC(sDBCText)
{
	sDBCText=new String(sDBCText);
	var sSBCText=new String("");
	for(var iCount=0;iCount<sDBCText.length;iCount++)
	{
		var iCharCode=sDBCText.charCodeAt(iCount);
		if(iCharCode==32)
		{
			sSBCText=sSBCText.concat(String.fromCharCode(12288));
		}
		else if(iCharCide<127)
		{
			sSBCText=sSBCText.concat(String.fromCharCode(iCharCode+65248));
		}
		else
		{
			sSBCText=sSBCText.concat(String.fromCharCode(iCharCode));
		}
	}
	return sSBCText;
}

//全角转半角
function ConvertToDBC(sSBCText)
{
	sSBCText=new String(sSBCText);
	var sDBCText=new String("");
	for(var iCount=0;iCount<sSBCText.length;iCount++)
	{
		var iCharCode=sSBCText.charCodeAt(iCount);
		if(iCharCode==12288)
		{
			sDBCText=sDBCText.concat(String.fromCharCode(32));
		}
		else if(iCharCode>65280&&iCharCode<65375)
		{
			sDBCText=sDBCText.concat(String.fromCharCode(iCharCode-65248));
		}
		else
		{
			sDBCText=sDBCText.concat(String.fromCharCode(iCharCode));
		}
	}
	return sDBCText;
}

//判断是否是日期
function IsDate(sText)
{
	if(sText==null)
	{
		return false;
	}
	var oRegDate=/^[0-9]{4}([-\s/.])((0{0,1}[469]|1[1])\1([12][0-9]|30|0{0,1}[1-9])|(0{0,1}[13578]|1[02])\1([12][0-9]|3[01]|0{0,1}[1-9])|(0{0,1}2)\1([12][0-9]|0{0,1}[1-9]))$/;
	return oRegDate.test(sText);
}
//2006-4-19
//检测字符串仅仅由a-z及0-9的字符组成
function IsLetter(sText)
{
	if(sText==null)
	{
		return false;
	}
	var oRegLetter=/^[a-zA-z0-9]{1,}$/;
	return oRegLetter.test(sText);
}

//2006-1-18
//检测第二个字符串是否位于第一个字符串中 支持通配符
//sText:被检测的字符串
//sKey:用来检测的字符串
//iSetting:设置 默认为正常搜索结合通配符
//	1:正常搜索
//	2:使用通配符
//	4:使用模糊匹配
function IndexOf(sText,sKey,iSetting)
{
	if(iSetting==null)
	{
		iSetting=3;
	}
	sText=new String(sText);
	sKey=new String(sKey);
	if((iSetting&1)==1)
	{
		if(sText.indexOf(sKey)>=0)
		{
			return true;
		}
	}
	if((iSetting&4)==4)
	{
		var iCount=0;
		var sNewKey="";
		while(iCount<sKey.length)
		{
			var sChar=sKey.substring(iCount,iCount+1);
			if(sChar!="*"&&sChar!="?")
			{
				sNewKey=sNewKey+sChar+"*";
			}
			iCount++;
		}
		sKey=sNewKey;
	}
	if((iSetting&2)==2)
	{
		sKey=sKey.replace(/？/g,"?");
		sKey=sKey.replace(/\s/g,",");
		sKey=sKey.replace(/，/g,",");
		sKey=sKey.replace(/\./g,"\\.");
		sKey=sKey.replace(/\(/g,"\\(");
		sKey=sKey.replace(/\)/g,"\\)");
		sKey=sKey.replace(/\]/g,"\\]");
		sKey=sKey.replace(/\[/g,"\\[");
		sKey=sKey.replace(/\+/g,"\\+");
		sKey=sKey.replace(/\-/g,"\\-");
		sKey=sKey.replace(/\}/g,"\\}");
		sKey=sKey.replace(/\{/g,"\\{");
		if(sKey.indexOf(",")>0)
		{
			sKey=sKey.replace(/\,/g,")|(");
			sKey="("+sKey+")";
		}
		else
		{
			sKey=".{0,}"+sKey+".{0,}";
		}
		sKey=sKey.replace(/\*/g,".{0,}");
		sKey=sKey.replace(/\?/g,".{1,}");
		var oReg=new RegExp(sKey,"gi");
		if(oReg.test(sText))
		{
			return true;
		}
	}
	return false;
}

//2006-1-4
//大概计算一个字符串的在屏幕上显示的长度
//sText:字符串
//iSpacing:字符间距
//iCharLen:中文字符所占的宽度 英文字符的宽度按照此宽度的0.6计算
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;
	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
//检测是否是正整数并且检查是否位于某个区间
//sNumber:被检测的字符串
//iMin:区间的左边界 若为NULL则作无穷小处理
//iMax:区间的右边界 若为NULL则作无穷大处理
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;
	}
}
//检测是否是数字并且检查是否位于某个区间
//sNumber:被检测的字符串
//iMin:区间的左边界 若为NULL则作无穷小处理
//iMax:区间的右边界 若为NULL则作无穷大处理
function IsNumber(sNumber,iMin,iMax){
	var regNumber=/^(\-){0,1}([0-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=/[\u00ff-\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){
		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 IsEmail(sEmail){
	var regEmail=/^[\w\.\-_]{1,30}@[\w\-]{1,50}\.(\w{2,3})(\.\w{2,3}){0,1}$/;
	return regEmail.test(sEmail);
}
//是否是手机号码
function IsMobile(sMobile){
	var regMobile=/^1[3|5][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;
　	}
}