从校验的本体来看,校验分成客户端使用JS的基本合法性校验,服务器端Java或者JSP的合法性校验和业务校验三类。
  对于服务器端JAVA和JSP校验需要注意的问题是如何向客户呈现错误信息,首先要保障用户输入的信息能够重新反馈给客户;其次需要一个统一的错误信息提示,例如使用弹出窗口、层伪造窗口等等手段。
  对于业务校验和JAVA校验大同小异,不再赘述。
  对于JS的基本校验建议采用不破坏结构的轻量级的解决方案,即是在需要校验的控件上增加附加的参数使用Javascript实现预期的校验,而javascript负责绑定form的onsubmit函数,使得当页面进行提交的时候对form中的元素进行校验。
  本文只针对javascript的校验提出解决方案。本解决方案需要解决以下问题:
     1、页面元素和校验的脚本如何契合,如何使得校验不破坏结构。
     2、如何不影响现有的javascript。
   一个校验包含:
     1、规则
     2、结果 或者显示的消息
     3、处理,对于页面校验而言,绝大部分是屏蔽form提交,本文也是如此。

  Validator提供了一个不错的思路,规则定义使用动态类的方式,但是对于Validaotor来说,不足之处在于编码还是比较繁琐,而且不直接支持自定义的校验规则,只能使用String类型的脚本支持。
  校验规则的定义是整个校验的核心,校验使用了一个公共的类jeasonzhao.validator

if(window.jeasonzhao==null)
{
  window.jeasonzhao={};
  window.jeasonzhao.validator={
    uint:/\d+/,
    char:"[a-zA-Z]+",
    custom:function()
    {
      return this.value>=this.min&& this.value<=this.max;
    }
  }
}
这个类定义了大量的校验规则(上段代码只是示例),校验规则支持三种
1、正则表达式,校验的时候直接使用控件的值去匹配正则表达式,符合则表示规则通过。
2、字符串,字符串作为正则表达式相同的表达,如此而已。
3、函数(参看custom),函数返回的值确定校验是否通过,函数中可以使用this指针直接引用当前校验的控件对象,这种方式对校验做了最大限度的扩展。
以下是使用校验的HTML实例
<input type="text" validator="uint" msg="出现校验失败的消息" />
<input type="text" validator="custom" min="0" max="1024" msg="出现校验失败的消息" />
对于validator的扩展比较简单,直接附加window.jeasonzhao.validator的成员变量即可,如此可以进行更加灵活的配置,例如
window.jeasonzhao.validator.regex=function()
{
      return new Regex(this.regex).test(this.value);
}

高级的校验可能不止一个校验规则,例如判断值不能为空且必须为整数,那么就会产生多个校验规则并行使用,方案支持简单的逻辑表达式的支持,目前支持两目运算,使用“and”标识“并”,使用“or”标识“或”,例如
<input type="text" validator="notnull and nunit" .../>

如果可能,我会在以后的开发中支持完整的表达式,现在看来,这样已经可以满足需求了。
现在面临的最大问题是如何捆绑校验到form,保证form在提交的时候调用校验函数,Validator使用的是直接生成onsubmit的方法,这样有点缺陷就是无法保证用户不会生成自己的onsubmit函数,所以,方案采用注入的方式,从外部javascript捆绑函数,同时保证用户编写的onsubmit函数能够正常执行,可惜的是onsubmit这个东东不能使用attachEvent方式,所以只能自己写了
function bindBefore(obj,evnt,fn)
{
  if(null==obj||null==evnt||null==fn)
  {
    return;
  }
  var ele=obj;//document.getElementById(obj);
  var args=Array.prototype.slice.call(arguments,3);
  var oldfn=ele[evnt];
  ele[evnt]=function()
  {
    var ret=fn.apply(ele,args);
    if(!ret)
    {
      return false;
    }
    if(null!=oldfn)
    {
      ret=oldfn.apply(ele,args);
    }
    return ret;
  };
}

的确,你可以修改一下函数调用的顺序就可以使得用户的函数优先,
使用的时候我们使用bindBefore(document.forms[0],"onsubmit",function(){...});即可实现绑定,是的,可以实现多次绑定!!!!!
我想我不用写出后面的代码,大家也应该知道如何实现了,呵呵,洗洗睡觉啦。