<title>表单验证</title>
 <META http-equiv=Content-Type content="text/html; charset=gb2312">
<style>
 body,td{font:normal 12px Verdana;color:#333333}
 input,textarea,select,td{font:normal 12px Verdana;color:#333333;border:1px solid #999999;background:#ffffff}
 table{border-collapse:collapse;}
 td{padding:3px}
 input{height:20;}
 textarea{width:80%;height:50px;overfmin:auto;}
 form{display:inline}
 </style>
 <body>
 <table align="center">
  <form name="theForm" id="demo" action="" method="get" onSubmit="CheckForm('Zip');">
    <tr> 
      <td>真实姓名:</td>
      <td><input onblur="CheckForm(this)" id="真实姓名" name="Name" reg="^[\u0391-\uFFE5]+$" datasel="howlong" min="2" max="5"  msg="只允许中文且长度在2到5个字符"></td>
    </tr>
    <tr> 
      <td>英文名:</td>
      <td><input onblur="CheckForm(this)" id="英文名" name="Nick" reg="^[A-Za-z]+$" datasel="howlong" min="4" max="20" msg="只允许英文字母且长度在4到20个字符"></td>
    </tr>
    <tr> 
      <td>主页:</td>
      <td><input onblur="CheckForm(this)" id="主页" name="Homepage" reg="^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>])*$" onnull="true" msg="非法的Url"></td>
    </tr>
    <tr> 
      <td>密码:</td>
      <td><input onblur="CheckF(this)" id="密码" name="Password" datasel="" Compareto="RePassword" type="password" reg=""></td>
    </tr>
    <tr> 
      <td>重复密码:</td>
      <td><input onblur="CheckForm(this)" id="重复密码" name="RePassword" datasel="Repeat" Compareto="Password" msg="两次输入的密码不一致" type="password"></td>
    </tr>
    <tr> 
      <td>电子邮件:</td>
      <td><input onblur="CheckForm(this)" id="电子邮件" name="Email" reg="^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$" msg="电子邮件格式不正确"></td>
    </tr>
    <tr> 
      <td>年龄:</td>
      <td><input onblur="CheckForm(this)" id="年龄" name="age" reg="^\d+$" datasel="scale" min="16" max="99"></td>
    </tr>
    <tr> 
      <td>年龄1:</td>
      <td><input onblur="CheckForm(this)" id="年龄1" name="age1" reg="^\d+$" datasel="Compare" msg="年龄必须为100以下的数字" Compareto="100" CompareMode="LT"></td>
    </tr>
    <tr>
      <td>自我介绍:</td>
      <td><textarea onblur="CheckForm(this)" id="自我介绍" name="Description" datasel="howlong" min="10" max="500" CompareMode="GTE"></textarea></td>
    </tr>
    <tr> 
      <td colspan="2"><input name="Submit" type="submit" value="确定提交"></td>
    </tr>
  </form>
 </table>
 <script>function CheckF(Obj){
CheckForm(theForm[Obj.Compareto])
CheckForm(Obj)
}
function parsestr(str){
if(isNaN(parseFloat(str)))return str;
else return parseFloat(str);
}
function compare(op1,op2,operator){
switch (operator) {
case "NE":return (op1 != op2);
case "GT":return (op1 > op2);
case "GTE":return (op1 >= op2);
case "LT":return (op1 < op2);
case "LTE":return (op1 <= op2);
default:return (op1 == op2);            
}
}
function showcompare(operator,va){
switch (operator) {
case "NE":return "输入数值不能等于"+va;
case "GT":return "输入数值应大于"+va;
case "GTE":return "输入数值应大于等于"+va;
case "LT":return "输入数值应小于"+va;
case "LTE":return "输入数值应小于等于"+va;
default:return "输入数值应等于"+va;
}
}
function addspan(Obj,msg){
clenspan(Obj,0);
var span = document.createElement("SPAN");
span.id = "Error_"+Obj.name;
span.style.color = "red";
theForm[Obj.name].parentNode.appendChild(span);
rs="Error_"+String(Obj.name)
span.innerHTML = msg;
}
function clenspan(Obj,type){
if(window["Error_"+Obj.name])if(window["Error_"+Obj.name].id== "Error_"+Obj.name)theForm[Obj.name].parentNode.removeChild(window["Error_"+Obj.name]);if(type==1)addspan(Obj,"ok");}function CheckForm(Obj){var Error_msg;if(Obj.datasel){switch(String(Obj.datasel)){case "Compare" :{if(!compare(parsestr(Obj.value),parsestr(Obj.Compareto),Obj.CompareMode)){Error_msg=showcompare(Obj.CompareMode,Obj.Compareto)}break;}case "Repeat" :{if(!compare(parsestr(Obj.value),parsestr(theForm[Obj.Compareto].value),Obj.CompareMode)){Error_msg=showcompare(Obj.CompareMode,theForm[Obj.Compareto].id)}break;}case "scale" :{if(parsestr(Obj.value)>parsestr(Obj.max) || parsestr(Obj.value)<parsestr(Obj.min))Error_msg="输入数值应在"+Obj.min+"--"+Obj.max+"之间";break;}case "howlong" :{if(parsestr(Obj.value.length)>parsestr(Obj.max) || parsestr(Obj.value.length)<parsestr(Obj.min))Error_msg="输入字符数应在"+Obj.min+"--"+Obj.max+"个之间";break;}default:break;}}if(Obj.reg){if(!RegExp(Obj.reg,"g").test(String(Obj.value)))Error_msg="格式错误";}if(!/.+/.test(Obj.value)) Error_msg="不能为空";if(Error_msg){if(Obj.onnull == "true" && !/.+/.test(Obj.value)){clenspan(Obj,1); return false;}if((Obj.msg!=null) && (Error_msg!="不能为空"))Error_msg=Obj.msg;addspan(Obj,Error_msg);}else{clenspan(Obj,1);}}
</script>
</body>
现在问题是,怎么能实现所有标签都是“ok”才能提交呢?还有,有的项目不是必填项,所以不会出ok,只要验证所有正则符合就行了
谢谢