<title>表单验证类Validatorv1.0</title>
<style>
body,td{font:normal12pxVerdana;color:#333333}
input,textarea,select,td{font:normal12pxVerdana;color:#333333;border:1pxsolid#999999;background:#ffffff}
table{border-collapse:collapse;}
td{padding:3px}
input{height:20;}
textarea{width:80%;height:50px;overflow:auto;}
form{display:inline}
</style>
<tablealign="center">
<formname="theForm"id="demo"action=""method="get"onSubmit="returnValidator.Validate(this,2)">
<tr>
<td>真实姓名:</td><td><inputname="Name"dataType="Chinese"msg="真实姓名只允许中文"></td>
</tr>
<tr>
<td>英文名:</td><td><inputname="Nick"dataType="English"require="false"msg="英文名只允许英文字母"></td>
</tr>
<tr>
<td>主页:</td><td><inputname="Homepage"require="false"dataType="Url"msg="非法的Url"></td>
</tr>
<tr>
<td>密码:</td><td><inputname="Password"dataType="SafeString"msg="密码不符合安全规则"type="password"></td>
</tr>
<tr>
<td>重复:</td><td><inputname="Repeat"dataType="Repeat"to="Password"msg="两次输入的密码不一致"type="password"></td>
</tr>
<tr>
<td>信箱:</td><td><inputname="Email"dataType="Email"msg="信箱格式不正确"></td>
</tr>
<tr>
<td>信箱:</td><td><inputname="Email"dataType="Repeat"to="Email"msg="两次输入的信箱不一致"></td>
</tr>
<tr>
<td>QQ:</td><td><inputname="QQ"require="false"dataType="QQ"msg="QQ号码不存在"></td>
</tr>
<tr>
<td>身份证:</td><td><inputname="Card"dataType="IdCard"msg="身份证号码不正确"></td>
</tr>
<tr>
<td>年龄:</td><td><inputname="Year"dataType="Range"msg="年龄必须在18~28之间"min="18"max="28"></td>
</tr>
<tr>
<td>年龄1:</td><td><inputname="Year1"require="false"dataType="Compare"msg="年龄必须在18以上"to="18"operator="GreaterThanEqual"></td>
</tr>
<tr>
<td>电话:</td><td><inputname="Phone"require="false"dataType="Phone"msg="电话号码不正确"></td>
</tr>
<tr>
<td>手机:</td><td><inputname="Mobile"require="false"dataType="Mobile"msg="手机号码不正确"></td>
</tr>
<tr>
<td>生日:</td><td><inputname="Birthday"dataType="Date"format="ymd"msg="生日日期不存在"></td>
</tr>
<tr>
<td>邮政编码:</td><td><inputname="Zip"dataType="Custom"regexp="^[1-9]\d{5}$"msg="邮政编码不存在"></td>
</tr>
<tr>
<td>邮政编码:</td><td><inputname="Zip1"dataType="Zip"msg="邮政编码不存在"></td>
</tr>
<tr>
<td>操作系统:</td><td><selectname="Operation"dataType="Require"msg="未选择所用操作系统"><optionvalue="">选择您所用的操作系统</option><optionvalue="Win98">Win98</option><optionvalue="Win2k">Win2k</option><optionvalue="WinXP">WinXP</option></select></td>
</tr>
<tr>
<td>所在省份:</td><td>广东<inputname="Province"value="1"type="radio">陕西<inputname="Province"value="2"type="radio">浙江<inputname="Province"value="3"type="radio">江西<inputname="Province"value="4"type="radio"dataType="Group"msg="必须选定一个省份"></td>
</tr>
<tr>
<td>爱好:</td><td>运动<inputname="Favorite"value="1"type="checkbox">上网<inputname="Favorite"value="2"type="checkbox">听音乐<inputname="Favorite"value="3"type="checkbox">看书<inputname="Favorite"value="4"type="checkbox""dataType="Group"min="2"max="3"msg="必须选择2~3种爱好"></td>
</tr>
<td>自我介绍:</td><td><textareaname="Description"dataType="Limit"max="10"msg="自我介绍内容必须在10个字之内">中文是一个字</textarea></td>
</tr>
<td>自传:</td><td><textareaname="History"dataType="LimitB"min="3"max="10"msg="自传内容必须在[3,10]个字节之内">中文是两个字节t</textarea></td>
</tr>
<tr>
<tdcolspan="2"><inputname="Submit"type="submit"value="确定提交"><inputonClick="Validator.Validate(document.getElementById('demo'))"value="检验模式1"type="button"><inputonClick="Validator.Validate(document.getElementById('demo'),2)"value="检验模式2"type="button"><inputonClick="Validator.Validate(document.getElementById('demo'),3)"value="检验模式3"type="button"></td>
</tr>
</form>
</table>
<script>
/*************************************************
Validatorv1.0
codyby我佛山人
wfsr@cunite.com
http://www.cunite.com
*************************************************/
Validator={
Require:/.+/,
Email:/^\w+([-+.]\w+)*@\w+([-.]\\w+)*\.\w+([-.]\w+)*$/,
Phone:/^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/,
Mobile:/^((\(\d{3}\))|(\d{3}\-))?13\d{9}$/,
Url:/^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/,
IdCard:/^\d{15}(\d{2}[A-Za-z0-9])?$/,
Currency:/^\d+(\.\d+)?$/,
Number:/^\d+$/,
Zip:/^[1-9]\d{5}$/,
QQ:/^[1-9]\d{4,8}$/,
Integer:/^[-\+]?\d+$/,
Double:/^[-\+]?\d+(\.\d+)?$/,
English:/^[A-Za-z]+$/,
Chinese:/^[\u0391-\uFFE5]+$/,
UnSafe:/^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/,
IsSafe:function(str){return!this.UnSafe.test(str);},
SafeString:"this.IsSafe(value)",
Limit:"this.limit(value.length,getAttribute('min'),getAttribute('max'))",
LimitB:"this.limit(this.LenB(value),getAttribute('min'),getAttribute('max'))",
Date:"this.IsDate(value,getAttribute('min'),getAttribute('format'))",
Repeat:"value==document.getElementsByName(getAttribute('to'))[0].value",
Range:"getAttribute('min')<value&&value<getAttribute('max')",
Compare:"this.compare(value,getAttribute('operator'),getAttribute('to'))",
Custom:"this.Exec(value,getAttribute('regexp'))",
Group:"this.MustChecked(getAttribute('name'),getAttribute('min'),getAttribute('max'))",
ErrorItem:[document.forms[0]],
ErrorMessage:["以下原因导致提交失败:\t\t\t\t"],
Validate:function(theForm,mode){
varobj=theForm||event.srcElement;
varcount=obj.elements.length;
this.ErrorMessage.length=1;
this.ErrorItem.length=1;
this.ErrorItem[0]=obj;
for(vari=0;i<count;i++){
with(obj.elements[i]){
var_dataType=getAttribute("dataType");
if(typeof(_dataType)=="object"||typeof(this[_dataType])=="undefined")continue;
this.ClearState(obj.elements[i]);
if(getAttribute("require")=="false"&&value=="")continue;
switch(_dataType){
case"Date":
case"Repeat":
case"Range":
case"Compare":
case"Custom":
case"Group":
case"Limit":
case"LimitB":
case"SafeString":
if(!eval(this[_dataType])){
this.AddError(i,getAttribute("msg"));
}
break;
default:
if(!this[_dataType].test(value)){
this.AddError(i,getAttribute("msg"));
}
break;
}
}
}
if(this.ErrorMessage.length>1){
mode=mode||1;
varerrCount=this.ErrorItem.length;
switch(mode){
case2:
for(vari=1;i<errCount;i++)
this.ErrorItem[i].style.color="red";
case1:
alert(this.ErrorMessage.join("\n"));
this.ErrorItem[1].focus();
break;
case3:
for(vari=1;i<errCount;i++){
try{
varspan=document.createElement("SPAN");
span.id="__ErrorMessagePanel";
span.style.color="red";
this.ErrorItem[i].parentNode.appendChild(span);
span.innerHTML=this.ErrorMessage[i].replace(/\d+:/,"*");
}
catch(e){alert(e.description);}
}
this.ErrorItem[1].focus();
break;
default:
alert(this.ErrorMessage.join("\n"));
break;
}
returnfalse;
}
returntrue;
},
limit:function(len,min,max){
min=min||0;
max=max||Number.MAX_VALUE;
returnmin<=len&&len<=max;
},
LenB:function(str){
returnstr.replace(/[^\x00-\xff]/g,"**").length;
},
ClearState:function(elem){
with(elem){
if(style.color=="red")
style.color="";
varlastNode=parentNode.childNodes[parentNode.childNodes.length-1];
if(lastNode.id=="__ErrorMessagePanel")
parentNode.removeChild(lastNode);
}
},
AddError:function(index,str){
this.ErrorItem[this.ErrorItem.length]=this.ErrorItem[0].elements[index];
this.ErrorMessage[this.ErrorMessage.length]=this.ErrorMessage.length+":"+str;
},
Exec:function(op,reg){
returnnewRegExp(reg,"g").test(op);
},
compare:function(op1,operator,op2){
switch(operator){
case"NotEqual":
return(op1!=op2);
case"GreaterThan":
return(op1>op2);
case"GreaterThanEqual":
return(op1>=op2);
case"LessThan":
return(op1<op2);
case"LessThanEqual":
return(op1<=op2);
default:
return(op1==op2);
}
},
MustChecked:function(name,min,max){
vargroups=document.getElementsByName(name);
varhasChecked=0;
min=min||1;
max=max||groups.length;
for(vari=groups.length-1;i>=0;i--)
if(groups[i].checked)hasChecked++;
returnmin<=hasChecked&&hasChecked<=max;
},
IsDate:function(op,formatString){
formatString=formatString||"ymd";
varm,year,month,day;
switch(formatString){
case"ymd":
m=op.match(newRegExp("^\\s*((\\d{4})|(\\d{2}))([-./])(\\d{1,2})\\4(\\d{1,2})\\s*$"));
if(m==null)returnfalse;
day=m[6];
month=m[5]--;
year=(m[2].length==4)?m[2]:GetFullYear(parseInt(m[3],10));
break;
case"dmy":
m=op.match(newRegExp("^\\s*(\\d{1,2})([-./])(\\d{1,2})\\2((\\d{4})|(\\d{2}))\\s*$"));
if(m==null)returnfalse;
day=m[1];
month=m[3]--;
year=(m[5].length==4)?m[5]:GetFullYear(parseInt(m[6],10));
break;
default:
break;
}
vardate=newDate(year,month,day);
return(typeof(date)=="object"&&year==date.getFullYear()&&month==date.getMonth()&&day==date.getDate());
functionGetFullYear(y){return((y<30?"20":"19")+y)|0;}
}
}
</script>
<style>
body,td{font:normal12pxVerdana;color:#333333}
input,textarea,select,td{font:normal12pxVerdana;color:#333333;border:1pxsolid#999999;background:#ffffff}
table{border-collapse:collapse;}
td{padding:3px}
input{height:20;}
textarea{width:80%;height:50px;overflow:auto;}
form{display:inline}
</style>
<tablealign="center">
<formname="theForm"id="demo"action=""method="get"onSubmit="returnValidator.Validate(this,2)">
<tr>
<td>真实姓名:</td><td><inputname="Name"dataType="Chinese"msg="真实姓名只允许中文"></td>
</tr>
<tr>
<td>英文名:</td><td><inputname="Nick"dataType="English"require="false"msg="英文名只允许英文字母"></td>
</tr>
<tr>
<td>主页:</td><td><inputname="Homepage"require="false"dataType="Url"msg="非法的Url"></td>
</tr>
<tr>
<td>密码:</td><td><inputname="Password"dataType="SafeString"msg="密码不符合安全规则"type="password"></td>
</tr>
<tr>
<td>重复:</td><td><inputname="Repeat"dataType="Repeat"to="Password"msg="两次输入的密码不一致"type="password"></td>
</tr>
<tr>
<td>信箱:</td><td><inputname="Email"dataType="Email"msg="信箱格式不正确"></td>
</tr>
<tr>
<td>信箱:</td><td><inputname="Email"dataType="Repeat"to="Email"msg="两次输入的信箱不一致"></td>
</tr>
<tr>
<td>QQ:</td><td><inputname="QQ"require="false"dataType="QQ"msg="QQ号码不存在"></td>
</tr>
<tr>
<td>身份证:</td><td><inputname="Card"dataType="IdCard"msg="身份证号码不正确"></td>
</tr>
<tr>
<td>年龄:</td><td><inputname="Year"dataType="Range"msg="年龄必须在18~28之间"min="18"max="28"></td>
</tr>
<tr>
<td>年龄1:</td><td><inputname="Year1"require="false"dataType="Compare"msg="年龄必须在18以上"to="18"operator="GreaterThanEqual"></td>
</tr>
<tr>
<td>电话:</td><td><inputname="Phone"require="false"dataType="Phone"msg="电话号码不正确"></td>
</tr>
<tr>
<td>手机:</td><td><inputname="Mobile"require="false"dataType="Mobile"msg="手机号码不正确"></td>
</tr>
<tr>
<td>生日:</td><td><inputname="Birthday"dataType="Date"format="ymd"msg="生日日期不存在"></td>
</tr>
<tr>
<td>邮政编码:</td><td><inputname="Zip"dataType="Custom"regexp="^[1-9]\d{5}$"msg="邮政编码不存在"></td>
</tr>
<tr>
<td>邮政编码:</td><td><inputname="Zip1"dataType="Zip"msg="邮政编码不存在"></td>
</tr>
<tr>
<td>操作系统:</td><td><selectname="Operation"dataType="Require"msg="未选择所用操作系统"><optionvalue="">选择您所用的操作系统</option><optionvalue="Win98">Win98</option><optionvalue="Win2k">Win2k</option><optionvalue="WinXP">WinXP</option></select></td>
</tr>
<tr>
<td>所在省份:</td><td>广东<inputname="Province"value="1"type="radio">陕西<inputname="Province"value="2"type="radio">浙江<inputname="Province"value="3"type="radio">江西<inputname="Province"value="4"type="radio"dataType="Group"msg="必须选定一个省份"></td>
</tr>
<tr>
<td>爱好:</td><td>运动<inputname="Favorite"value="1"type="checkbox">上网<inputname="Favorite"value="2"type="checkbox">听音乐<inputname="Favorite"value="3"type="checkbox">看书<inputname="Favorite"value="4"type="checkbox""dataType="Group"min="2"max="3"msg="必须选择2~3种爱好"></td>
</tr>
<td>自我介绍:</td><td><textareaname="Description"dataType="Limit"max="10"msg="自我介绍内容必须在10个字之内">中文是一个字</textarea></td>
</tr>
<td>自传:</td><td><textareaname="History"dataType="LimitB"min="3"max="10"msg="自传内容必须在[3,10]个字节之内">中文是两个字节t</textarea></td>
</tr>
<tr>
<tdcolspan="2"><inputname="Submit"type="submit"value="确定提交"><inputonClick="Validator.Validate(document.getElementById('demo'))"value="检验模式1"type="button"><inputonClick="Validator.Validate(document.getElementById('demo'),2)"value="检验模式2"type="button"><inputonClick="Validator.Validate(document.getElementById('demo'),3)"value="检验模式3"type="button"></td>
</tr>
</form>
</table>
<script>
/*************************************************
Validatorv1.0
codyby我佛山人
wfsr@cunite.com
http://www.cunite.com
*************************************************/
Validator={
Require:/.+/,
Email:/^\w+([-+.]\w+)*@\w+([-.]\\w+)*\.\w+([-.]\w+)*$/,
Phone:/^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/,
Mobile:/^((\(\d{3}\))|(\d{3}\-))?13\d{9}$/,
Url:/^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/,
IdCard:/^\d{15}(\d{2}[A-Za-z0-9])?$/,
Currency:/^\d+(\.\d+)?$/,
Number:/^\d+$/,
Zip:/^[1-9]\d{5}$/,
QQ:/^[1-9]\d{4,8}$/,
Integer:/^[-\+]?\d+$/,
Double:/^[-\+]?\d+(\.\d+)?$/,
English:/^[A-Za-z]+$/,
Chinese:/^[\u0391-\uFFE5]+$/,
UnSafe:/^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/,
IsSafe:function(str){return!this.UnSafe.test(str);},
SafeString:"this.IsSafe(value)",
Limit:"this.limit(value.length,getAttribute('min'),getAttribute('max'))",
LimitB:"this.limit(this.LenB(value),getAttribute('min'),getAttribute('max'))",
Date:"this.IsDate(value,getAttribute('min'),getAttribute('format'))",
Repeat:"value==document.getElementsByName(getAttribute('to'))[0].value",
Range:"getAttribute('min')<value&&value<getAttribute('max')",
Compare:"this.compare(value,getAttribute('operator'),getAttribute('to'))",
Custom:"this.Exec(value,getAttribute('regexp'))",
Group:"this.MustChecked(getAttribute('name'),getAttribute('min'),getAttribute('max'))",
ErrorItem:[document.forms[0]],
ErrorMessage:["以下原因导致提交失败:\t\t\t\t"],
Validate:function(theForm,mode){
varobj=theForm||event.srcElement;
varcount=obj.elements.length;
this.ErrorMessage.length=1;
this.ErrorItem.length=1;
this.ErrorItem[0]=obj;
for(vari=0;i<count;i++){
with(obj.elements[i]){
var_dataType=getAttribute("dataType");
if(typeof(_dataType)=="object"||typeof(this[_dataType])=="undefined")continue;
this.ClearState(obj.elements[i]);
if(getAttribute("require")=="false"&&value=="")continue;
switch(_dataType){
case"Date":
case"Repeat":
case"Range":
case"Compare":
case"Custom":
case"Group":
case"Limit":
case"LimitB":
case"SafeString":
if(!eval(this[_dataType])){
this.AddError(i,getAttribute("msg"));
}
break;
default:
if(!this[_dataType].test(value)){
this.AddError(i,getAttribute("msg"));
}
break;
}
}
}
if(this.ErrorMessage.length>1){
mode=mode||1;
varerrCount=this.ErrorItem.length;
switch(mode){
case2:
for(vari=1;i<errCount;i++)
this.ErrorItem[i].style.color="red";
case1:
alert(this.ErrorMessage.join("\n"));
this.ErrorItem[1].focus();
break;
case3:
for(vari=1;i<errCount;i++){
try{
varspan=document.createElement("SPAN");
span.id="__ErrorMessagePanel";
span.style.color="red";
this.ErrorItem[i].parentNode.appendChild(span);
span.innerHTML=this.ErrorMessage[i].replace(/\d+:/,"*");
}
catch(e){alert(e.description);}
}
this.ErrorItem[1].focus();
break;
default:
alert(this.ErrorMessage.join("\n"));
break;
}
returnfalse;
}
returntrue;
},
limit:function(len,min,max){
min=min||0;
max=max||Number.MAX_VALUE;
returnmin<=len&&len<=max;
},
LenB:function(str){
returnstr.replace(/[^\x00-\xff]/g,"**").length;
},
ClearState:function(elem){
with(elem){
if(style.color=="red")
style.color="";
varlastNode=parentNode.childNodes[parentNode.childNodes.length-1];
if(lastNode.id=="__ErrorMessagePanel")
parentNode.removeChild(lastNode);
}
},
AddError:function(index,str){
this.ErrorItem[this.ErrorItem.length]=this.ErrorItem[0].elements[index];
this.ErrorMessage[this.ErrorMessage.length]=this.ErrorMessage.length+":"+str;
},
Exec:function(op,reg){
returnnewRegExp(reg,"g").test(op);
},
compare:function(op1,operator,op2){
switch(operator){
case"NotEqual":
return(op1!=op2);
case"GreaterThan":
return(op1>op2);
case"GreaterThanEqual":
return(op1>=op2);
case"LessThan":
return(op1<op2);
case"LessThanEqual":
return(op1<=op2);
default:
return(op1==op2);
}
},
MustChecked:function(name,min,max){
vargroups=document.getElementsByName(name);
varhasChecked=0;
min=min||1;
max=max||groups.length;
for(vari=groups.length-1;i>=0;i--)
if(groups[i].checked)hasChecked++;
returnmin<=hasChecked&&hasChecked<=max;
},
IsDate:function(op,formatString){
formatString=formatString||"ymd";
varm,year,month,day;
switch(formatString){
case"ymd":
m=op.match(newRegExp("^\\s*((\\d{4})|(\\d{2}))([-./])(\\d{1,2})\\4(\\d{1,2})\\s*$"));
if(m==null)returnfalse;
day=m[6];
month=m[5]--;
year=(m[2].length==4)?m[2]:GetFullYear(parseInt(m[3],10));
break;
case"dmy":
m=op.match(newRegExp("^\\s*(\\d{1,2})([-./])(\\d{1,2})\\2((\\d{4})|(\\d{2}))\\s*$"));
if(m==null)returnfalse;
day=m[1];
month=m[3]--;
year=(m[5].length==4)?m[5]:GetFullYear(parseInt(m[6],10));
break;
default:
break;
}
vardate=newDate(year,month,day);
return(typeof(date)=="object"&&year==date.getFullYear()&&month==date.getMonth()&&day==date.getDate());
functionGetFullYear(y){return((y<30?"20":"19")+y)|0;}
}
}
</script>