头衔:月临河
|
y0h |
职务:极速版主 等级:大天使 声望:+2 幸运:6 积分:5723 经验:114872 文章:5694 注册:04-01-08 18:42
|
|
|
发表: 2004-12-23 18:05:16 人气:70 | 楼主 |
通用表单校验函数
表单校验,相信是许多人的头疼事,尤其对于大表单,几十个项目,校验更是问题 我也深受其苦 冥思苦想,又参考了好多资料,写就了这个通用表单校验函数 使用这个函数,只需简单设置 就可以对大部分表单进行客户端校验 代码如下 我JS功底不深,该函数亦有不足之处,还望高手能指点一二....
本函数只内置了9种常用的校验 略懂正则的朋友可以自行添加,扩展,数量不限..... 基本可以代替绝大部分的表单校验....
<SCRIPT LANGUAGE="JavaScript"> <!-- function check(form1) { //通用化表单校验函数! var re=new Array(); re[1] = /^/w{3,20}$/; //ID,不允许中文 re[2] = /^/d+$/ ; //数值 re[3] = /^.+@/w+(./w+)+$/ //Email re[4] = /^.{2,30}$/ //普通,允许中文 re[5] = /^/d{6}$/ //邮政编码 re[6] = /^(00/d{1,3}-){0,1}0/d{3}-/d{7,8}$/ //电话号码 re[7] = /^/d{4}$/ //4位验证码 re[8] = /(^/d{15}$)|(^/d{18}$)|(^/d{17}[Xx]$)/ //身份证 re[9] = /^(.|/n){1,}$/ //普通无最大限制,允许中文 var tem=0,i,j,x,y; for(i=0;i<form1.length;i++) { var x = form1[i].getAttribute("DType"); if (x != null){ x = form1[i].getAttribute("DType").toUpperCase(); y = parseInt(form1[i].getAttribute("DType").substr(1)); switch(form1[i].type){ case "text": case "textarea": case "password": if(x.charAt(0)!='N'||form1[i].value.length>0){ if(y!=0){ if(form1[i].value.search(re[y])==-1){ alert('条件不符/n'+form1[i].title); form1[i].focus(); return false; } if(form1[i].type=="password"&&form1[i+1].type=="password"&&form1[i].value!=form1[i+1].value){ alert('两次输入的密码不一致,请重新输入'); form1[i].focus(); return false; } } } break; case "select-one":if(y>1)y=1; case "select-multiple": if(x.charAt(0)!='N'){ if(y!=0){tem=0; for(j=0;j<form1[i].length;j++) { if(form1[i].options[j].selected)tem++; } if(tem<y){ alert(form1[i].title+'条件不符/n你应该至少选择'+y+'项.'); form1[i].focus(); return false; } } } break; case "radio":if(y>1)y=1; case "checkbox": if(x.charAt(0)!='N'){ if(y!=0){tem=0; var radiotem=eval("form1."+form1[i].name); for(j=0;j<radiotem.length;j++) if(radiotem[j].checked)tem++; } if(tem<y){ alert(form1[i].title+'条件不符/n你应该至少选择'+y+'项.'); form1[i].focus(); return false; } } break; } } } return true; } //--> </SCRIPT> |
[ 这个贴子最后由y0h在2004-12-24 9:02:16编辑过 ] | |
|
|
<script language=javascript>ds(1592520,1592519,0,"20041223180538",2,"y0h",32379,"",202,12,"",5723,"0",6892322,"","20040108184234","密","20041224100503",5694,"../images/upload/face/2004/08/02/084400.jpg",90,63,128,"0",1,"月临河",0,2,6); </script>
头衔:月临河
|
y0h |
职务:极速版主 等级:大天使 声望:+2 幸运:6 积分:5723 经验:114872 文章:5694 注册:04-01-08 18:42
|
|
|
发表: 2004-12-23 18:05:38 | 第2楼 |
使用说明
使用说明
为每个需要验证的表单项新加一个一个属性 DType DType属性的赋值为 一个字母+一个数字组成 字母的取值只有y 和 n
y表示该项不允许为空 n表示该项允许为空但要做值合法性检测
数字的取值与表单域的type有关
对于 "text":"textarea":"password": 该数值为校验的模式,比如Email校验,此处就为3 函数内置了几种校验模式,当然懂正则的可以自行扩展,随意发挥 对于 select 和 radio 此处为一大于0的数值即可
对于 checkbox和select-multiple 此处为必须选择的最小项数
还利用表单域的另一属性title title的内容为该域的取值说明.title可以不填.......
好了,各元素都设置好了之后
在表单的 onsubmit事件中加上 return check(表单名)即可....
|
[ 这个贴子最后由y0h在2004-12-23 18:28:19编辑过 ] | |
|
|
<script language=javascript>ds(1592522,1592519,0,"20041223180601",1,"y0h",32379,"",202,12,"",5723,"0",6892322,"","20040108184234","密","20041224100503",5694,"../images/upload/face/2004/08/02/084400.jpg",90,63,128,"0",1,"月临河",4,2,6); </script>
头衔:月临河
|
y0h |
职务:极速版主 等级:大天使 声望:+2 幸运:6 积分:5723 经验:114872 文章:5694 注册:04-01-08 18:42
|
|
|
发表: 2004-12-23 18:06:01 | 第3楼 |
对密码域的特别说明
对密码域的特别说明
本函数可对相邻的两个密码域自动做相等比较
所以对于重复输入密码的应用 您只需让两个密码域相邻(即中间再没有别的表单控件),并设置第一个的DType属性即可
但是对于修改密码的应用,可能出现三个密码域相邻的情况,即第一个为输入旧密码,第二个和第三个为密码与重复密码
该函数会将第一个与第二个自动进行相等匹配...这不是我们希望的
解决办法就是在第一个后插入一个隐藏域()使第一个与第二个密码域不相邻即可..
对checkbox与radio的说明
对checkbox和radio的要求是必须成组(name相同),最少选择个数是指该组中的选择个数 一组checkbox与radio控件中,只需设置其中的一个控件DType属性即可 |
[ 这个贴子最后由y0h在2004-12-24 8:58:21编辑过 ] | |
|
|
<script language=javascript>ds(1592557,1592520,0,"20041223182703",1,"y0h",32379,"",202,12,"",5723,"0",6892322,"","20040108184234","密","20041224100503",5694,"../images/upload/face/2004/08/02/084400.jpg",90,63,128,"0",1,"月临河",0,2,6); </script>
头衔:月临河
|
y0h |
职务:极速版主 等级:大天使 声望:+2 幸运:6 积分:5723 经验:114872 文章:5694 注册:04-01-08 18:42
|
|
|
发表: 2004-12-23 18:27:03 | 第4楼 |
简单示例.
简单示例.
<FORM METHOD=POST ACTION="" name=form1 οnsubmit="return check(form1)"><BR> 文本型举例<BR> <INPUT TYPE="text" NAME="Email" DType="y3" title="Email格式" value="y0h@163.com"> E-mail检测 <BR><INPUT TYPE="text" NAME="Email" DType="n6" title="电话号码"> 电话号码,可以为空<BR> 密码校验<BR> <INPUT TYPE="password" DType="y01" title="不为空大于3位"><INPUT TYPE="password" > <BR> 文本区域<BR> <textarea name="textarea" DType="y9" Title="文本区域"></textarea> <BR>checkbox举例<BR> <INPUT TYPE="checkbox" name="a" title="aaa"><INPUT TYPE="checkbox" name="a" title="y01"><INPUT TYPE="checkbox" name="a" title="y1"><INPUT TYPE="checkbox" DType="y2" name="a" title="checkbox">最少选择两项<BR>radio举例<BR> <INPUT TYPE="radio" name="b" title="aaa"><INPUT TYPE="radio" name="b" title="y01"><INPUT TYPE="radio" name="b" title="y1"><INPUT TYPE="radio" DType="y2" name="b" title="radio"><BR> 多选列表<BR><select name="select" size="4" DType="y2" multiple title="多选列表"> <option value="111">111</option> <option value="222">222</option> <option value="333">333</option> <option value="444">444</option> </select>最少选择两项<BR> <INPUT TYPE="submit" value="检测"></FORM>
..........校验函数部分 |
[ 这个贴子最后由y0h在2004-12-24 9:00:58编辑过 ] |
|