﻿function CLASS_CHECK()
{

	//定义内置格式
	var aUsage = 
	{
		"int":"^([+-]?)\\d+$",											//整数
		"int+":"^([+]?)\\d+$",											//正整数
		"int-":"^-\\d+$",												//负整数
		"num":"^([+-]?)\\d*\\.?\\d+$",									//数字
		"num+":"^([+]?)\\d*\\.?\\d+$",									//正数
		"num-":"^-\\d*\\.?\\d+$",										//负数
		"float":"^([+-]?)\\d*\\.\\d+$",									//浮点数
		"float+":"^([+]?)\\d*\\.\\d+$",									//正浮点数
		"float-":"^-\\d*\\.\\d+$",										//负浮点数																		
		"email":"^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$",	//邮件
		"str":"^[A-Za-z0-9]",											//字符和数字
		"color":"^#[a-fA-F0-9]{6}",										//颜色
		"url":"^http[s]?:\\/\\/([\\w-]+\\.)+[\\w-]+([\\w-./?%&=]*)?$",	//联接
		"chinese":"^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$",				//仅中文
		"ascii":"^[\\x00-\\xFF]+$",										//仅ACSII字符
		"zipcode":"^\\d{6}$",											//邮编
		"mobile":"^0{0,1}13[0-9]{9}$",									//手机
		"ip4":"^\(([0-1]?\\d{0,2})|(2[0-5]{0,2}))\\.(([0-1]?\\d{0,2})|(2[0-5]{0,2}))\\.(([0-1]?\\d{0,2})|(2[0-5]{0,2}))\\.(([0-1]?\\d{0,2})|(2[0-5]{0,2}))$",				//ip地址
		"notempty":"^\\S+$",											//非空
		"picture":"(.*)\\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$",	//图片
		"rar":"(.*)\\.(rar|zip|7zip|tgz)$",								//压缩文件
		"date":"^\\d{4}(\\-|\\/|\.)\\d{1,2}\\1\\d{1,2}$",				//日期
		"tel":"^([+-]?)\\d+$"											//电话
	};
	
	this.keyCheck = function()
	{
		if(window.attachEvent)
		{
			window.attachEvent("onload",function(){for(var i=0;i<document.forms.length;i++){var theFrom = document.forms[i]; if(theFrom){myKeyCheck(theFrom);}}});
		}
		else
		{
			//TOOD
		}

		function myKeyCheck(oForm)
		{
			var els = oForm.elements;
			//遍历所有表元素
			for(var i=0;i<els.length;i++)
			{
				//取得格式
				var sUsage	= els[i].getAttribute("Usage");	
				
				//如果设置Usage，则使用内置正则表达式，忽略Exp
				if(typeof(sUsage)!="undefined"&&sUsage!=null)
				{
					switch(sUsage.toLowerCase ())
					{
						case "zipcode":
						case "int":
							els[i].onkeypress	= function(){return /\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('+')<0?String.fromCharCode(event.keyCode)=="+":false)||(this.value.indexOf('-')<0?String.fromCharCode(event.keyCode)=="-":false);}
							els[i].onpaste		= function(){return !clipboardData.getData('text').match(/\D/);}
							els[i].ondragenter	= function(){return false;}
							els[i].style.imeMode= "disabled";
							break;
						case "str":
							els[i].onkeypress	= function(){return /[A-Za-z0-9]/.test(String.fromCharCode(event.keyCode));}
							els[i].onpaste		= function(){return !clipboardData.getData('text').match(/\D/);}
							els[i].ondragenter	= function(){return false;}
							els[i].style.imeMode= "disabled";
							break;
						case "mobile":
						case "int+":
							els[i].onkeypress	= function(){return /\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('+')<0?String.fromCharCode(event.keyCode)=="+":false);}
							els[i].onpaste		= function(){return !clipboardData.getData('text').match(/\D/);}
							els[i].ondragenter	= function(){return false;}
							els[i].style.imeMode= "disabled";
							break;
						case "int-":
							els[i].onkeypress	= function(){return /\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('-')<0?String.fromCharCode(event.keyCode)=="-":false);}					
							els[i].onpaste		= function(){return !clipboardData.getData('text').match(/\D/);}
							els[i].ondragenter	= function(){return false;}
							els[i].style.imeMode= "disabled";
							break;
						case "float":
						case "num":
							els[i].onkeypress	= function(){return /[\+\-\.]|\d/.test(String.fromCharCode(event.keyCode));}					
							els[i].onpaste		= function(){return !clipboardData.getData('text').match(/\D/);}
							els[i].ondragenter	= function(){return false;}
							els[i].style.imeMode= "disabled";
							break;
						case "float+":
						case "num+":
							els[i].onkeypress	= function(){return /[\+\.]|\d/.test(String.fromCharCode(event.keyCode));}					
							els[i].onpaste		= function(){return !clipboardData.getData('text').match(/\D/);}
							els[i].ondragenter	= function(){return false;}
							els[i].style.imeMode= "disabled";
							break;
						case "float-":
						case "num-":
							els[i].onkeypress	= function(){return /[\-\.]|\d/.test(String.fromCharCode(event.keyCode));}					
							els[i].onpaste		= function(){return !clipboardData.getData('text').match(/\D/);}
							els[i].ondragenter	= function(){return false;}
							els[i].style.imeMode= "disabled";
							break;
						case "ascii":
							els[i].style.imeMode= "disabled";
							break;
						case "ip4":
							els[i].onkeypress	= function(){return /[\.]|\d/.test(String.fromCharCode(event.keyCode));}					
							els[i].onpaste		= function(){return !clipboardData.getData('text').match(/\D/);}
							els[i].ondragenter	= function(){return false;}
							els[i].style.imeMode= "disabled";
							els[i].maxLength	= 15;
							break;
						case "color":
							els[i].onkeypress	= function(){return /[a-fA-Z]|\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('#')<0?String.fromCharCode(event.keyCode)=="#":false);}					
							els[i].onpaste		= function(){return !clipboardData.getData('text').match(/\D/);}
							els[i].ondragenter	= function(){return false;}
							els[i].maxLength	= 7;
							els[i].style.imeMode= "disabled";
							break;
						case "date":
							els[i].onkeypress	= function(){return /[\/\-\.]|\d/.test(String.fromCharCode(event.keyCode));}					
							els[i].onpaste		= function(){return !clipboardData.getData('text').match(/\D/);}
							els[i].ondragenter	= function(){return false;}
							els[i].style.imeMode= "disabled";
							break;
						case "tel":
							els[i].onkeypress	= function(){return /\d/.test(String.fromCharCode(event.keyCode))|| String.fromCharCode(event.keyCode)=="+" || String.fromCharCode(event.keyCode)=="-";}
							els[i].onpaste		= function(){return !clipboardData.getData('text').match(/\D/);}
							els[i].ondragenter	= function(){return false;}
							els[i].style.imeMode= "disabled";
							break;
					}
				}
			}
		}
	}
}

//初始化
var g_check = new CLASS_CHECK();
	g_check.keyCheck();

