This Domain(Admin5.com) is for Sale:

用Javascript校验客户端数据

时间:2007-10-22  来源:不详  作者:林子

作者:纵横软件制作中心 雨亦奇

一、准确获取文本框数据的字节长度 copyright dedecms

也许你要问,在javascript中,利用form.textfield.value.length就可以得到form表单的textfield文本框中输入数据的长度了,难道这个长度不是以字节计的吗? 本文来自织梦

在详细说明之前,读者不妨先测试如下网页:

本文来自织梦

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML4.01Transitional//EN">
<html>
<head>
<title>长度测试</title>
<meta http-equiv="Content-Type"
content="text/html; charset=gb2312">
</head>
<script>
function strlen(str)
{
return str.length;
}
function test()
{
alert("'" form1.textfield.value "'的长度等于"
strlen(form1.textfield.value));
}
</script>
<body>
<form name="form1" method="post" action="">
<p>输入字符串:
<input name="textfield" type="text" value="china中国">
</p>
<p>
<input type="button" name="Button" value="测试" onclick="test();">
</p>
</form>
</body>
</html>
内容来自dedecms

测试的结果如下:

织梦好,好织梦

copyright dedecms

怎么样?“china中国”的长度是7,而不是9(按字节算的话,它的长度应该是9)。为什么会这样?答案是这个长度是以Unicode字符计的长度,一个英文字母是一个Unicode字符,一个汉字也是一个Unicode字符。

copyright dedecms

实际上我们经常用的并不是这个长度,而是以字节为单位计算的长度。在B/S开发中,我们所用的后台数据库,其字段宽度就是以节字计算的。以字节为单位时,一个英文字母是一个字节,而一个汉字则是两个字节了,二者长度不一样。 dedecms.com

由于数据校验不宜在数据库服务器端进行(这样做效率很低),所以在客户端(浏览器端)进行数据校验时,就必须以字节为单位,以避免输入的数据超出字段宽度。为此,必须能获取输入数据的准确的字节长度。

copyright dedecms

笔者经过一番研究,写了如下javascript函数:

织梦好,好织梦

function strlen(str)
{
var len;
var i;
len = 0;
for (i=0;i<str.length;i )
{
if (str.charCodeAt(i)>255) len =2; else len ;
}
return len;
}
copyright dedecms

在这个javascript脚本中,strlen函数逐个取str字符串中的Unicode字符,利用charCodeAt获取指定位置的字符的值(为数字形式,可和数字进行比较),因为英文字符的值总在0到255之间,所以我们可以认定,如果该值大于255,就表示是汉字,长度加2,否则长度加1,这样最终可得到这个字符串以字节计的长度,满足了我们的要求。

看完这篇,您有何感觉呢?

文章评论

共有位Admini5网友发表了评论 查看完整内容

24小时热门信息