正在阅读:如何用Javascript校验客户端数据如何用Javascript校验客户端数据

2009-03-12 23:34 出处:中国计算机报 作者:雨亦奇 责任编辑:huangpeidan
一、准确获取文本框数据的字节长度

  也许你要问,在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>

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

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

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

  笔者经过一番研究,写了如下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;
}


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

关注我们

最新资讯离线随时看 聊天吐槽赢奖品