英文字符和中文字符的长度如何比较?
最典型的例子是用户注册,假如系统设定长度为20个字符(节)。通常我们判断字符串的长度是通过 .length() 方法来截取字符串的长度的,可是如果用户输入20个中文时,长度没有发生任何变化,可是它却占用了40个字节,也就是说根本无法插入到数据库中去。
请问各位大虾,通过什么方法可以判断英文字符的长度和中文字符的长度呢?这个实例在很多地方都能用到,希望作过类似判断的朋友不要保留。
问题点数:50、回复次数:20Top
1 楼GJA106(中文字符)回复于 2002-02-26 09:08:37 得分 0
String sC = "中国";
String sE = "en";
int iChinalength = (filename.getBytes()).length;
int iEnglishl = sE.length();Top
2 楼hlhtyql(南方人)回复于 2002-02-26 09:23:41 得分 0
请问 GJA106(中文字符) :
在JavaScript里该如何写呢?我写的是
var txtNewUserName = document.frmSelUserName.NewUserName;
var sUserName = txtNewUserName.value;
var bytestr = sUserName.getBytes();
if ( bytestr.length<3||bytestr.length>20 ) {
alert("用户名必须是3-20个字符!请重新输入。");
//txtNewUserName.vlaue = ""; //clear vlaue
txtNewUserName.focus();
return false;
}
可是系统却说“对象不支持此属性和方法”。
该如何写呢?比较急。谢谢了。Top
3 楼yanchang(笨笨)回复于 2002-02-26 09:25:56 得分 0
我是这样做的
用toCharArray()将字符穿转化为char[]
判断char[i]的值,如果是标准Ascii(128)就家1,否则加2
其长度就是数据库varchar所允许的实际长度Top
4 楼GJA106(中文字符)回复于 2002-02-26 09:30:30 得分 0
偶不会用JavaScript:(Top
5 楼hlhtyql(南方人)回复于 2002-02-26 09:36:16 得分 0
to:yanchang(笨笨)
有具体的javascript代码吗?Top
6 楼hlhtyql(南方人)回复于 2002-02-26 09:49:14 得分 0
还有高手吗?Top
7 楼gzwrj(我无知,所以我有智慧.)回复于 2002-02-26 10:10:00 得分 0
我们是这样做的..
先判断输入是否有中文,如果有中文,那么以后输入的都是中文(就算是英文).Top
8 楼pengji(彭乃超)回复于 2002-02-26 10:26:36 得分 0
其实这个问题很简单,只需要判断输入的是内容的ASCII码是不是在0-128之间就可以了!
for (i=0; i<robjField.length; i++)
{
intCode = (robjField.charCodeAt(i));
if (intCode>=0 && intCode<=128) continue;
return false;
}
快给分,哈哈!Top
9 楼hlhtyql(南方人)回复于 2002-02-26 11:06:18 得分 0
to :pengji(彭乃超)
你这样做不行啊!我的目的不仅仅用于注册,其实很多地方可以通用的。
如果用户既输入英文,又输入中文,你这样判断就不灵了。
作出来了我立马结帖。Top
10 楼hlhtyql(南方人)回复于 2002-02-26 11:07:51 得分 0
to :pengji(彭乃超)
你这样做不行啊!我的目的不仅仅用于注册,其实很多地方可以通用的。
如果用户既输入英文,又输入中文,你这样判断是不是就不灵了?
作出来了我立马结帖。Top
11 楼armyshu(我和CSDN不得不说的故事)回复于 2002-02-26 11:42:57 得分 0
将pengji的改进一下,做一个长度计数器不就行了
for (i=0; i<robjField.length; i++)
{
intCode = (robjField.charCodeAt(i));
if (intCode>=0 && intCode<=128) continue;
else totallength=tmpl+2;
if(totallenth>"指定的长度");
alert(输入字符超长!);
return false;
return false;
}
Top
12 楼hlhtyql(南方人)回复于 2002-02-27 09:13:45 得分 0
还是不行啊!不能对长度进行累加,怎么解决啊?
急死人啦!!!Top
13 楼ddtqfly(风语无阻)回复于 2002-02-27 10:05:55 得分 0
可以使用 "StringName".getBytes().length 这样不管是中文还是英文都被转化为字节,这样如果是中文就为2 bytes 英文就为 1 byte ,输出的就是总的长度了Top
14 楼ddtqfly(风语无阻)回复于 2002-02-27 10:05:55 得分 0
可以使用 "StringName".getBytes().length 这样不管是中文还是英文都被转化为字节,这样如果是中文就为2 bytes 英文就为 1 byte ,输出的就是总的长度了Top
15 楼Brainy(晓晓)回复于 2002-02-27 13:12:53 得分 0
同意......Top
16 楼pengji(彭乃超)回复于 2002-02-27 22:31:17 得分 0
to:hlhtyql(南方人)
为什么不能对长度进行累加啊!?Top
17 楼hlhtyql(南方人)回复于 2002-02-28 21:10:35 得分 0
to:pengji(彭乃超)
sUserName为输入框的值:
for (var i=0;i<sUserName.length;i++)
{
var totallength = 0;
var intCode = sUserName.charCodeAt(i);
if (intCode>=0&&intCode<=128) {//continue;
totallength = totallength+1;
}
else {
totallength = totallength+2;
}
alert(totallength);
if (totallength<3||totallength>20) {
alert("用户名必须是3-20个字符!请重新输入。");
txtNewUserName.focus();
return false;
}
return true;
} //end for
你看我写的,值就是不累加,要么为,要么为2。Top
18 楼pengji(彭乃超)回复于 2002-02-28 22:27:59 得分 50
to:hlhtyql(南方人)你的代码中有严重错误我已经修改过了如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!--
function a()
{
var totallength=0;
for (var i=0;i<document.forma.sUserName.value.length;i++)
{
var str=document.forma.sUserName.value;
var intCode=str.charCodeAt(i);
if (intCode>=0 && intCode<=128) {//continue;
totallength=totallength+1;
}
else {
totallength=totallength+2;
}
} //end for
alert(totallength);
if (totallength<3 || totallength>20)
{
document.forma.sUserName.select();
alert("用户名必须是3-20个字符!请重新输入。");
return false;
}
return true;
}
//-->
</SCRIPT>
<TITLE> New Document </TITLE>
</HEAD>
<BODY>
<form name="forma" >
<input type="text" name="sUserName">
<input type="button" value="test" onclick="a();">
</form>
</BODY>
</HTML>
Top
19 楼hlhtyql(南方人)回复于 2002-03-01 09:13:08 得分 0
to: pengji(彭乃超)
我测试了一下,你的代码是完全正确的,我现在就结帖,50分全给你,并希望在以后继续得到你的帮助,能留下你的E--mail吗?
我的E--mail为:hlhtyql@263.net 。
非常感谢你。Top
20 楼pengji(彭乃超)回复于 2002-03-01 09:32:34 得分 0
没问题!我的MAIL是:pengji@21cn.com顺便问一下你是上海的吗?!Top
21 楼hlhtyql(南方人)回复于 2002-03-01 15:04:47 得分 0
to: pengji(彭乃超)
谢谢!
我在北京。Top
22 楼anjex(anjex)回复于 2002-03-04 15:40:58 得分 0
/**
* 判断包含汉字的字符传的长度到底是多少来着;按照一个汉字
* 是两个字节来计算;
* @param String str 所要进行判断的字符传;
* @return int 字符长度
*/
public int ChStrLen(String str)
{
int len=0;
if (str==null) return len;
else
{
if (str.length()>0)
{
char[] arr=str.toCharArray();
len=arr.length;
for (int i=0;i<arr.length;i++)
{
if (arr[i]>255) len=len+1;
}
}
}
return len;
}Top





