/*/////////////////////////////////////////////////////////////////////////// V 0.3
文件名       : HTMLControlsValidityCheck.js
作者         : 沈剑
创建日期     : 2004年4月15日
最后修改日期 : 2004年4月21日
用途         : HTML表单控件校验，信息提示
///////////////////////////////////////////////////////////////////////////////////

检查密码是否一致
Compare_ValidityCheck(obj1,obj2)
		参数obj1 : 密码框对象
		参数obj2 : 密码框对象
		返回值 : boolean

//禁用 用单个正则表达式校验一个对象的字符串格式
//禁用 RegExp_ValidityCheck(obj,work)
//禁用 		参数obj : 文本框对象,必须定义myexplain属性. myexplain见附二
//禁用 		参数work : 校验类型,可选值参考附一
//禁用 		返回值 : boolean

用若干正则表达式校验一个对象的字符串格式
RegExps_ValidityCheck(obj,works)
		参数obj : 文本框对象,必须定义myexplain属性. myexplain见附二
		参数works : 校验类型数组,可选值参考附一
		返回值 : boolean
		
///////////////////////////////////////////////////////////////////////////////////

附一 校验类型表，忽略大小写

Id     Type               Message
-----------------------------------------------------------------------------------
0      IsNull             不可为空
1      NotInNumChars      不在数字范围内,可选字符(0-9)
2      NotInSmlLetter     不在小写字母范围内,可选字符(a-z)
3      NotInCptLetter     不在大写字母范围内,可选字符(A-Z)
4      NotInChnChars      不在汉字集范围内
5      IsIllicitChar      不能有非法字符"/\'"<>"

50     Email              格式错误
51     HTTP               格式错误

100    NotInChars1        不在可选字符范围内,可选字符(A-Za-z0-9)
101    NotInChars2        不在可选字符范围内,可选字符(A-Za-z0-9_)
102    NotInChars3        不在可选字符范围内,可选字符(A-Za-z0-9_)和汉字



IsNull-NotInNumChars-NotInSmlLetter-NotInCptLetter-NotInChnChars-Email-HTTP-NotInChars1-NotInChars2-NotInChars3

///////////////////////////////////////////////////////////////////////////////////

附二 对象的myexplain属性

myexplain属性说明:
    此属性是用户手工为HTML表单添加的属性,必须定义,用于在于显示提示信息时显示所指对象.
例:<input type="text" myexplain="用户名">

///////////////////////////////////////////////////////////////////////////////////

附三 增加正则表达式步骤

1、在附一中添加一行记录
2、在ValidityCheck()中增加两处程序，数组定义一处，switch里两处

/////////////////////////////////////////////////////////////////////////////////*/

//自定设置=========================================================================
//var AutoValidityCheck = 0; //是否自动校验  "1"自动  "0"手动
//var ShowMessage = 1; //是否显示提示信息  "1"显示  "0"不显示
//var NeedExplain = 0; //是否需要myexplain属性  "1"必须  "0"不须

//文本框===========================================================================

//检查密码是否一致
//obj1 : 密码框
//obj2 : 重复密码框
//返回值 : boolean
function Compare_ValidityCheck(obj1,obj2)
{
	if (obj1.value != obj2.value)
	{
		alert("密码输入不一致");
		return false;
	}
	return true;
}

function RegExp_ValidityLength(obj1,length)
{
	//RegExp = /^(.|\n){1,length}$/ig;
	//RegExp.length
}

//正则表达式校验===================================================================

//获取正则表达式或者提示信息
//type : 校验类型
//返回值 : 表达式
function ValidityCheck()
{
	var RegExp = new Array();
	//表达式和提示信息
	RegExp[0] = new Array(/^$/ig,								"不可为空");//IsNull 匹配空字符串
	RegExp[1] = new Array(/[^\d]+/ig,							"只能使用数字(0-9)");//NotInNumChars 匹配数字
	RegExp[2] = new Array(/[^a-z]+/ig,							"只能使用小写英文字母(a-z)");//NotInSmlLetter 匹配小写字母
	RegExp[3] = new Array(/[^A-Z]+/ig,							"只能使用大写英文字母(A-Z)");//NotInCptLetter 匹配大写字母
	RegExp[4] = new Array(/[^\u4E00-\uFA29]+/ig,				"只能使用汉字");//NotInChnChars 匹配汉字
	RegExp[5] = new Array(/[\/\'"<>]+/ig,						"不能有非法字符/\\' \"<>");//IsIllicitChar 匹配非法字符
	
	RegExp[50] = new Array(/^\w+@(\w+\.)+\w+$/ig,				"格式错误");//Email 匹配Email地址
	RegExp[51] = new Array(/^http:\/\/(\w+[.]?)+[^\.]+$/ig,		"格式错误");//HTTP 匹配HTTP地址
	
	RegExp[100] = new Array(/[^A-Za-z0-9]+/ig,					"只能使用英文字母(a-z)和数字(0-9)");//NotInChars1 匹配任何单词字符(A-Za-z0-9)
	RegExp[101] = new Array(/[^\w]+/ig,							"只能使用英文字母(a-z)、数字(0-9)以及下划线");//NotInChars1 匹配包括下划线的任何单词字符(A-Za-z0-9_)
	RegExp[102] = new Array(/[^\w\u4E00-\uFA29]+/ig,			"只能使用英文字母(a-z)、数字(0-9)、汉字及下划线");//NotInChars2 匹配包括下划线的任何单词字符(A-Za-z0-9_)和汉字
	
	//RegExp[150] = new Array(/^(.|\n){1,2000}$/ig,				"长度超出限制");//控件输入的值不能超出某个范围
	
	//得到表达式
	this.TakeRegExp = function(type)
	{
		var returnValue;
		switch(type.toLowerCase())
		{
			case "isnull":returnValue = RegExp[0][0];break;
			case "notinnumchars":returnValue = RegExp[1][0];break;
			case "notinsmlletter":returnValue = RegExp[2][0];break;
			case "notincptletter":returnValue = RegExp[3][0];break;
			case "notinchnchars":returnValue = RegExp[4][0];break;
			case "isillicitchar":returnValue = RegExp[5][0];break;
			
			case "email":returnValue = RegExp[50][0];break;
			case "http":returnValue = RegExp[51][0];break;
			
			case "notinchars1":returnValue = RegExp[100][0];break;
			case "notinchars2":returnValue = RegExp[101][0];break;
			case "notinchars3":returnValue = RegExp[102][0];break;
			default:returnValue = null;
		}
		return returnValue;
	}
	
	//得到提示信息
	this.TakeMsg = function(type)
	{
		var returnValue;
		switch(type.toLowerCase())
		{
			case "isnull":returnValue = RegExp[0][1];break;
			case "notinnumchars":returnValue = RegExp[1][1];break;
			case "notinsmlletter":returnValue = RegExp[2][1];break;
			case "notincptletter":returnValue = RegExp[3][1];break;
			case "notinchnchars":returnValue = RegExp[4][1];break;
			case "isillicitchar":returnValue = RegExp[5][1];break;
			
			case "email":returnValue = RegExp[50][1];break;
			case "http":returnValue = RegExp[51][1];break;
			
			case "notinchars1":returnValue = RegExp[100][1];break;
			case "notinchars2":returnValue = RegExp[101][1];break;
			case "notinchars3":returnValue = RegExp[102][1];break;
			default:returnValue = null;
		}
		return returnValue;
	}
}
//用单个正则表达式校验字符串格式
//obj : 文本框对象
//work : 校验类型,可选值参考附一
//返回值 : boolean
function RegExp_ValidityCheck(obj,work)
{
	if (!obj)
	{
		alert("校验的对象不存在！");
		return true;
	}
	//if (obj.style.display == "none")
	//{
	//	return true;//对隐藏表单不作校验
//	}
	
	if (obj.myexplain == "" || obj.myexplain == null)
	{
		alert("参与校验的对象必须拥有myexplain属性，且不能为空");
		return false;
	}

	var wo = new ValidityCheck();//建立对象
	
	if (wo.TakeRegExp(work) == null)
	{
		alert("没有此种校验类型，请参考校验类型表");
		return false;
	}
	
	var strObjValue = obj.value;//得到字符串
	if (work == "email" || work == "http")
	{
		if (!wo.TakeRegExp(work).test(strObjValue))
		{
			alert(obj.myexplain + wo.TakeMsg(work));
			obj.focus;
			return false;
		}
	}
	else
	{
		if (wo.TakeRegExp(work).test(strObjValue))
		{
			alert(obj.myexplain + wo.TakeMsg(work));
			obj.focus;
			return false;
		}
	}

	return true;
}
//用若干正则表达式校验一个对象的字符串格式
//obj : 文本框对象
//arrWork : 校验类型数组,可选值参考附一
//返回值 : boolean
function RegExps_ValidityCheck(obj,arrWork)
{
	var n = arrWork.length;
	for (var i=0;i<n;i++)
	{
		if (!RegExp_ValidityCheck(obj,arrWork[i].toLowerCase()))return false;
	}
	return true;
}
