a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 112|回复: 0

[基础知识] 如何用Javascript校验客户端数据1

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
 一、准确获取文本框数据的字节长度
5 O. C9 [% N9 A3 u  \% h
" ]* V" ]+ H( m2 z+ z1 K  也许你要问,在Javascript中,利用form.textfield.value.length就可以得到form表单的textfield文本框中输入数据的长度了,难道这个长度不是以字节计的吗? 7 ]) O3 N) T/ ~- b* K( R

4 s& r, ]' p! P/ K7 l; n9 ?( r7 H  在详细说明之前,读者不妨先测试如下网页:
+ Q4 g" y* t( k) A! J/ S) `+ F' V4 b! h' K1 Z# `& _& L
, x; a( G$ }, |+ _+ D
长度测试输入字符串:
5 i# m" Q' ?/ U6 f5 _9 g7 ~& E! U1 k # W$ q4 i2 V  _0 e8 S

7 |  x  o' s1 M+ A' M3 W- ^  怎么样?“china中国”的长度是7,而不是9(按字节算的话,它的长度应该是9)。为什么会这样?答案是这个长度是以Unicode字符计的长度,一个英文字母是一个Unicode字符,一个汉字也是一个Unicode字符。
/ X& V! m# O& p. j/ w- f& V! b+ m; b# k* P$ g) I, t
  实际上我们经常用的并不是这个长度,而是以字节为单位计算的长度。在B/S开发中,我们所用的后台数据库,其字段宽度就是以节字计算的。以字节为单位时,一个英文字母是一个字节,而一个汉字则是两个字节了,二者长度不一样。 + G4 a( G1 i/ n/ A" i) \& k- Q

& p+ U! ]" n! t( ~* [  由于数据校验不宜在数据库服务器端进行(这样做效率很低),所以在客户端(浏览器端)进行数据校验时,就必须以字节为单位,以避免输入的数据超出字段宽度。为此,必须能获取输入数据的准确的字节长度。
9 }( e! W5 O5 \2 ~9 G- E( x, {& {" J1 K% t) ^1 u+ L
  笔者经过一番研究,写了如下Javascript函数:
' v4 r0 l- t: ^) e* w" e1 k
, T  W& V) |( c- Q
9 t3 b2 K) v% P5 Efunction strlen(str){var len;var i;len = 0;for (i=0;i255) len+=2; else len++;}return len;}7 V& \( Q$ \. K5 a
" T  n; B/ L  l
  在这个Javascript脚本中,strlen函数逐个取str字符串中的Unicode字符,利用charCodeAt获取指定位置的字符的值(为数字形式,可和数字进行比较),因为英文字符的值总在0到255之间,所以我们可以认定,如果该值大于255,就表示是汉字,长度加2,否则长度加1,这样最终可得到这个字符串以字节计的长度,满足了我们的要求。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-5 21:43 , Processed in 0.233987 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表