2007-11-16

表单验证

关键字: 验证
表单验证

除非只是一个发布资源的web应用,否则很难不和用户进行交互。
在交互的过程中就带来了一个验证用户输入的问题。
web应用是通过http协议和用户进行信息传输的,所以服务器端和客户端相互之间都是透明的,只存在符合http协议的数据传输,不用知道对方是什么。

严格来讲,由于客户端无论什么数据都有可能传送到服务器端(自己写客户端,什么数据都可以传送),所以在服务器端对数据进行验证是必须的。但是由于大多数用户还是使用IE,Firefox此类的通用浏览器,所以可以先在浏览器上对数据进行一次验证,然后再把数据传送给服务器端,以减少浏览器和服务器端的通信次数。

1.浏览器端验证
在浏览器端进行验证,是为了避免提交无效数据,以至于增加和服务器的连接次数。这里验证的只是,数据的规范性,而不是验证数据的合法性。打个比方,用户登录时,输入用户名和密码,客户端只能验证用户是否进行了输入,或者输入是否规范,但是用户名是否存在,密码是否正确,这就是客户端无法验证的了的。
客户端的验证主要是通过通用浏览器普遍都支持的javascript来进行的,在提交之前,根据设定好的规则,对表单数据统一进行验证,一经有不合格数据,立刻提醒用户,并取消提交。

2.服务器端验证
由于服务器并不知道客户端的行为,也就是说,对于服务器端来说,客户端是不可信的,所以当服务器接收到客户端发送过来的数据后,还是要进行一次验证,才能够保证数据的规范性。
服务器端的验证就是在处理数据之前,根据预先设定好的规则(这个规则通常是和客户端验证的规则是同样的),先把数据的规范性验证一遍。

为了得到良好的用户体验,以及安全性,两种验证是必不可少的。
从技术上来讲,两端都可以使用正则表达式来进行验证。

客户端主要的验证规则
1.邮件:
	 /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/

2.字符:
	/^[A-Za-z]+$/

3.字符长度
//双字节字符按一个字符计算
   “hello,你好”.length;

//双字节字符按两个字符计算
   “hello,你好”.replace(/[^\x00-\xff]/g,"**").length;

4.日期
  function checkDate(theDate){
    var reg = /^\d{4}-((0{0,1}[1-9]{1})|(1[0-2]{1}))-((0{0,1}[1-9]{1})|([1-2]{1}[0-9]{1})|(3[0-1]{1}))$/; 
    if(!reg.test(theDate)){
      return false;//格式不对
    }
    var ymd=theDate.split("-");
    var y=parseInt(ymd[0]);
    var m=parseInt(ymd[1]);
    var d=parseInt(ymd[2]);
    var date = new Date(y,m-1,d);        
    if(date.getFullYear()!=y || date.getMonth()!=(m-1) || date.getDate()!=d){
	return false;//日期不存在
    }
    return true;
  }
评论
发表评论

您还没有登录,请登录后发表评论

weiqingfei
搜索本博客
存档
最新评论