表单验证
除非只是一个发布资源的web应用,否则很难不和用户进行交互。
在交互的过程中就带来了一个验证用户输入的问题。
web应用是通过http协议和用户进行信息传输的,所以服务器端和客户端相互之间都是透明的,只存在符合http协议的数据传输,不用知道对方是什么。
严格来讲,由于客户端无论什么数据都有可能传送到服务器端(自己写客户端,什么数据都可以传送),所以在服务器端对数据进行验证是必须的。但是由于大多数用户还是使用IE,Firefox此类的通用浏览器,所以可以先在浏览器上对数据进行一次验证,然后再把数据传送给服务器端,以减少浏览器和服务器端的通信次数。
1.浏览器端验证
在浏览器端进行验证,是为了避免提交无效数据,以至于增加和服务器的连接次数。这里验证的只是,数据的规范性,而不是验证数据的合法性。打个比方,用户登录时,输入用户名和密码,客户端只能验证用户是否进行了输入,或者输入是否规范,但是用户名是否存在,密码是否正确,这就是客户端无法验证的了的。
客户端的验证主要是通过通用浏览器普遍都支持的javascript来进行的,在提交之前,根据设定好的规则,对表单数据统一进行验证,一经有不合格数据,立刻提醒用户,并取消提交。
2.服务器端验证
由于服务器并不知道客户端的行为,也就是说,对于服务器端来说,客户端是不可信的,所以当服务器接收到客户端发送过来的数据后,还是要进行一次验证,才能够保证数据的规范性。
服务器端的验证就是在处理数据之前,根据预先设定好的规则(这个规则通常是和客户端验证的规则是同样的),先把数据的规范性验证一遍。
为了得到良好的用户体验,以及安全性,两种验证是必不可少的。
从技术上来讲,两端都可以使用正则表达式来进行验证。
客户端主要的验证规则
1.邮件:
[code]
/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
[/code]
2.字符:
[code]
/^[A-Za-z]+$/
[/code]
3.字符长度
//双字节字符按一个字符计算
[code]
“hello,你好”.length;
[/code]
//双字节字符按两个字符计算
[code]
“hello,你好”.replace(/[^\x00-\xff]/g,"**").length;
[/code]
4.日期
[code]
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;
}
[/code]
除非只是一个发布资源的web应用,否则很难不和用户进行交互。
在交互的过程中就带来了一个验证用户输入的问题。
web应用是通过http协议和用户进行信息传输的,所以服务器端和客户端相互之间都是透明的,只存在符合http协议的数据传输,不用知道对方是什么。
严格来讲,由于客户端无论什么数据都有可能传送到服务器端(自己写客户端,什么数据都可以传送),所以在服务器端对数据进行验证是必须的。但是由于大多数用户还是使用IE,Firefox此类的通用浏览器,所以可以先在浏览器上对数据进行一次验证,然后再把数据传送给服务器端,以减少浏览器和服务器端的通信次数。
1.浏览器端验证
在浏览器端进行验证,是为了避免提交无效数据,以至于增加和服务器的连接次数。这里验证的只是,数据的规范性,而不是验证数据的合法性。打个比方,用户登录时,输入用户名和密码,客户端只能验证用户是否进行了输入,或者输入是否规范,但是用户名是否存在,密码是否正确,这就是客户端无法验证的了的。
客户端的验证主要是通过通用浏览器普遍都支持的javascript来进行的,在提交之前,根据设定好的规则,对表单数据统一进行验证,一经有不合格数据,立刻提醒用户,并取消提交。
2.服务器端验证
由于服务器并不知道客户端的行为,也就是说,对于服务器端来说,客户端是不可信的,所以当服务器接收到客户端发送过来的数据后,还是要进行一次验证,才能够保证数据的规范性。
服务器端的验证就是在处理数据之前,根据预先设定好的规则(这个规则通常是和客户端验证的规则是同样的),先把数据的规范性验证一遍。
为了得到良好的用户体验,以及安全性,两种验证是必不可少的。
从技术上来讲,两端都可以使用正则表达式来进行验证。
客户端主要的验证规则
1.邮件:
[code]
/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
[/code]
2.字符:
[code]
/^[A-Za-z]+$/
[/code]
3.字符长度
//双字节字符按一个字符计算
[code]
“hello,你好”.length;
[/code]
//双字节字符按两个字符计算
[code]
“hello,你好”.replace(/[^\x00-\xff]/g,"**").length;
[/code]
4.日期
[code]
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;
}
[/code]