为html表单域添加属性实现表单的javascript验证

为表单域添加属性实现表单验证
对表单的字段进行有效性验证也是个非常麻烦的事情,目前各种服务器端的程序(如Struts和WebWork)已经提供了Validation的机制,其实,若不需要那么高的安全性,完全可以把对表单的数据验证交给客户机来运行。这里我利用了Javascript灵活的语法和动态运行的功能(eval函数)提供了一个表单验证的javascript模型。并实现了常用的类型验证。
假设有一个表单是这样的:
<form name=”form0”>
<input type=text name=”field1”>
<input type=text name=”field2”>
<input type=text name=”field3”>
<input type=text name=”field4”>
</form>
有一种验证方式是这样的:将所有需要进行验证的字段及其验证类型等信息放入一个数组arr:
       Var arr=array(
       (‘form0.field1’,’Integer’,’true’//allow empty,’ field1 must be an integer!’//when error alert this),
       (‘form0.field2’,’Float’,’true’//allow empty, ’ field2 must be a float number!’),
       (‘form0.field3’,’DateTime’,’false’//allow empty,’’),
       (‘form0.field4’,null,’true’//allow empty,’’)
       );
在提交时进行下面的判断:
       If(checkAll(arr)){
              form0.submit();
       }
可以猜到checkAll函数的内容就是遍历arr并依次进行验证,错误时则返回false并作响应的提示。
上面的方法非常类似于定义一个xml文件对各字段的验证类型进行映射。
而利用上面的思想,加上html元素的可定制性,我将方法做如下修改:
首先修改html表单的定义:
<form name=”form0” οnsubmit=”return Validator.check(this)” desc=” 字段 1”>
<input type=text name=”field1” allow_empty=true validator=”Integer” desc=” 字段 2”>
<input type=text name=”field2” allow_empty=true validator=”Float” desc=” 字段 3”>
<input type=text name=”field3” validator=”DateTime” desc=” 字段 4”>
<input type=text name=”field4” allow_empty=true desc=” 字段 5”>
</form>
然后建立FormValidator类,并实例化一个对象Validator,并且,FormValidator除了有一个check(form)方法外,还拥有许多isXXX(str)的方法,其中XXX与validator=””对应(如Integer),check时,遍历该form的所有elements,找出拥有allow_empty和validator属性的字段,并验证之,下面给出了FormValidator的实现,其中的数据结构Iterator和Map请参考我的其他文章。
/*
*
*
*
*FormValidator
*
*
*
*/
function FormValidator(){
}
FormValidator.prototype.handleValid=function(elem){
}
FormValidator.prototype.handleInvalid=function(elem){
    elem.focus();
    elem.select();
}
FormValidator.prototype.check=function(form){
    try{
    var elems=new Iterator(form.elements);
    while(elems.hasNext()){
       var elem=elems.next();
       var value=elem.value;
       var validator=elem.validator;
       var allow_empty=elem.allow_empty;
       var desc=elem.desc;
       if(!desc){
           desc="";
       }
        if(allow_empty&&(allow_empty.toLowerCase()=="false"||allow_empty.toLowerCase()=="no"||allow_empty=="0")){
           if(this.isEmpty(elem.value)){
              alert(desc+" 不允许空值 !");
              try{
                  this.handleInvalid(elem);
              }catch(e){}
              return false;
           }else{
              try{
                  this.handleValid(elem);
              }catch(e){}
           }
       }
       if(validator){
           try{
              var msg=eval("this.is"+validator+"(value)");
              if(msg){
                  alert(" 输入不符合要求 :"+desc+msg);
                  try{
                     this.handleInvalid(elem);
                  }catch(e){}
                  return false;
              }else{
                  try{
                     this.handleValid(elem);
                  }catch(e){}
              }
           }catch(e){
           }
       }
    }
    }catch(e){
       alert(e);
       return false;
    }
    return true;
}
FormValidator.prototype.isEmpty=function(value){
    if(value==null||value==""){
       return true;
    }
}
FormValidator.prototype.isInteger=function(value){
    if(value==""){
       return;
    }
    myRegExp = /^[-+]?([0-9]+)$/;
    var valid=myRegExp.test(value);
    if(!valid){
       return " 请输入整数 !";
    }
}
FormValidator.prototype.isPhone=function(value){
    if(value==""){
       return;
    }
    myRegExp = /^([0-9]+)(([0-9]|[-])+)([0-9]+)$/;      
    var valid=myRegExp.test(value);
    if(!valid){
       return " 请输入正确的电话号码 !";
    }
}
FormValidator.prototype.isFloat=function(value){
    if(value==""){
       return;
    }
    myRegExp = /^[-+]?([0-9]+)([.]?[0-9]*)([eE]?[1-9]*)$/;
    var valid=myRegExp.test(value);
    if(!valid){
       return " 请输入数字 !";
    }
}
FormValidator.prototype.isEmail=function(value){
    if(value==""){
       return;
    }
    myRegExp = /^([a-zA-Z0-9_.]+)([@])([a-zA-Z0-9._]+)([.])([a-zA-Z]+)$/;
    var valid=myRegExp.test(value);
    if(!valid){
       return " 请输入正确的邮件格式 !";
    }
}
 
 
var Validator=new FormValidator();
/*
* End Validator
*/
 
<script language=javascript> function Iterator(arr){ this.i=0; if(arr&&!arr.length){//singble element this.arr=new Array(1); this.arr[0]=arr; }else{ try{ if(arr.type&&arr.type.match(/^select/)){//select????? this.arr=new Array(1); this.arr[0]=arr; }else{ this.arr=arr; } }catch(e){} } } Iterator.prototype.next=function(){ if(this.arr){ return this.arr[this.i++]; }else{ return null; } } Iterator.prototype.hasNext=function(){ return (this.arr!=null)&&(this.i 字段1(整数,非空)
字段2(浮点数,可空)
字段3(Email,非空)
字段4(电话,非空)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值