<font color=red>求救:如何判ie中的文本框内 字符串长度,要字节数,不是字符数</font>(100分)

  • 主题发起人 主题发起人 Walone
  • 开始时间 开始时间
W

Walone

Unregistered / Unconfirmed
GUEST, unregistred user!
我想判断输入的字节数。
因为 当用到中文字符串时
所限制的字节数就会突破
写到库里就会出问题
请问有没有好的解决方式???
 
根据得到的字符数,然后在根据字符数与字节数的关系计算处字节数,不可以吗?
 
使用delphi吗/
 
问一个很笨的问题
一个字符不是能放在一个字节里吗?
 
字符数跟字节数有分别吗?
 
各位大侠,难道没有遇到过这样的问题????
字符数与字节是什么关系,谁能告诉我?
如果是汉字和英文,数字混排时。
是不是还要先区分是不是汉字?
哪位大侠来帮个忙

难道真的没人在网页中用javascript判过字符串的长度??
给个答案先
 
真的不懂?
字节只是数据的计量单位。
ASCII字符集和扩展的8位字符集,实际上是一个字节存储一个字符。
汉字编码是采取双字节方式的,所以一个汉字占两个字节。
在一个混排字符串中判别汉字的个数,首先是要判别哪个是汉字编码。
双字节扩展编码的一般特征是高位为1,而汉字编码特征是A0A0
 
要字符数才真的难呢,len()返回的就是字节数
(英文就是一字符一字节,字节跟字符当然一样了)。
 
Ok,不用vbscript啦
用javascript中的 string.charCodeAt(i)来得到第i个字符对应的整数代码
然后判其是不是大于127就可以了
但是,很奇怪,我用的是win2000,ie是 5.00.2920.0000
显示的汉字的整数代码都是5位的,

"气死我啦".charCodeAt(0)=27668
"气死我啦".charCodeAt(0)=27515
"气死我啦".charCodeAt(0)=25102
"气死我啦".charCodeAt(0)=21862
是所谓的Unicode标准吧,也许!

这样的话,判长度就可以做个循环啦

function judgebytelen(valstr,maxlen)
{
var len=valstr.length;
for(var i=0;i&lt;valstr.length;i++)
{
if(valstr.charCodeAt(i)&gt;127)len++;
}
if(len&gt;maxlen)alert("太贪心了吧!");
}

ok,搞掂,是不是也该给自己点儿分呀,嘻嘻

在&lt;a href="DispQ.asp?LID=307311"&gt;另外一个问题&lt;/a&gt;中得出的结论,所以本问题可以撤消了,
不同意的请举手 :(=)
 
哎,老是忘了小于号,幸亏回头看了一眼

function judgebytelen(valstr,maxlen)
{
var len=valstr.length;
for(var i=0;i 小于 valstr.length;i++)
{
if(valstr.charCodeAt(i) 大于 127)len++;
}
if(len 大于 maxlen)alert("太贪心了吧!");
}
 
vbs和js的字符串都是用unicode,就是说英文、中文都是2个字节。
在数据库access,也是用unicode,比如,char(10),不管中英文都是
能放10个字。
但是,如果在其他数据库不是这样,你就可以在数据库里面substr,
比如:
insert into ..... values (...., substr(filedX,1,最大字节数), ...)

 
Walone,
原来你在这里也开了铺啊,^_^.
但别瞧不起VB哦~~~~~~~~~
哎,多少人瞧得起?
没办法,初中没有学PASCAL,只会从DOS下的QB转过来.

此外,谢谢你的JS例子,呵呵.
 

出于几方面考虑,我想还是把字符长度的校验放在客户端javascript中做
1,减轻服务器负担
2, 可以提示用户修改输入错误,且在此之前不用提交页面
没有用截取字符串的方法来做,因为
1,直接截有可能会出现半个汉字
2,并不知道截了以后的结果,是否让人满意,还不如提示修改
 

哪里敢瞧不起VB?
如果是的话,说不定有一堆人要去磨刀啦
我在初中还用过Apple II,那时候,只听说过Basic
不象现在这么花花绿绿的,什么东东语言都有

BTW:不用客气,我也在摸索
 
下面函数可以计算ansi字符串长度:

function len_bytes(s)
{
var ret=0;
for(var i=0;i&lt;s.length;i++)
ret+=((s.charCodeAt(i) &amp; 0xff00)==0)?1:2;
return ret;
}

比如:len_bytes("aa大a") 返回长度 5

用 (s.charCodeAt(i) &amp; 0xff00)==0 来判断是不是单字节字符,
为什么不用前面有人说的小于127?big5码的话不一定是2个字节都大于127。
 
多人接受答案了。
 
后退
顶部