//带中文字符串长度,一个中文字长度为2
String.prototype.lenB = function(){return this.replace(/[^\x00-\xff]/g,"**").length;}
 document.all.tes1.value.lenB();

解决方案 »

  1.   

    你把网页的字体设为utf-8,javascript能自动获得<script>
    str="&#65398;&#65436;&#65404;あなだ";alert(str.length);
    </script>
      

  2.   

    啊,这里不能显示,前面三个是半角的カワシ
    utf-8下面获得的值就是6,加入英文数字也一样的
      

  3.   

    现在问题是字符串里同时包括日文半角カナ,全角,英文,数字等等.我用的是
    var len=0;
    for (var i=0;i<str.length;i++){
       if (str.charCodeAt(i)>255) 
            len+=2; //unicode is 3 bytes, chinese and japanese are 2 bytes;
       else 
            len++;
       }
    alert(len);  我以为所有的0-255之间的Unicode都是1个字节长的,但是出现日文半角カナ的时候计算错误!日文半角カナ1个字节长,并不在0-255之间,希望能否指点清楚一点!!
      

  4.   

    现在问题已经解决!我把解决的方法发上来,以后有遇到着问题的人提供方便,我发现并不是所有的0-255之间的Unicode都是1个字节长的!!而且,日文的假名有半角的形式(Unicode是65377-65439,其中65381除外)!!,并不是只有这些是半角的,还有很多字符也是半角的!!所以说,仅仅靠判断是不是在0-255里面是不行的。考虑到Unicode包括了所有国家的各种字符,而且这些字符又是全角半角交杂的,所以,不会有一个完美的JS方法来进行半角字符的校验。但是因为一般别的字符也用不上,以后做的多是对日项目,所以还是沿用0-255的方法,然后抠掉一些全角的,再加上对半角日文的校验,写成以下一个方法,供研究使用:function calcUTFByte(str)
    {
    var len=0;
    for (var i=0;i<str.length;i++)
    {
    var temp = str.charCodeAt(i);
    if( temp >= 0 && temp <= 254){
    //以下是0-255之内为全角的字符
    if( temp == 162
    || temp == 163
    || temp == 167
    || temp == 168
    || temp == 171
    || temp == 172
    || temp == 175
    || temp == 176
    || temp == 177
    || temp == 180
    || temp == 181
    || temp == 182
    || temp == 183
    || temp == 184
    || temp == 187
    || temp == 215
    || temp == 247){
    len+=2;
    }
    len++;
    }else if( temp >= 65377 && temp <= 65439){
    if( temp == 65381 ){
    len+=2;
    }
    len++;
    }else{
    len+=2;
    }
    }
    return len;
    }
      

  5.   

    不好意思,前面没看到你要求计算的是字节数,我以为是字符个数既然用utf-8,这个更简单function getByte(str){
    tempstr=str.replace(/[\uff61-\uff9f]/g, "a");//半角片假文
    tempstr=tempstr.replace(/[\u3041-\u309f]/g, "aa");//全角平假文
    tempstr=tempstr.replace(/[\u30a0-\u30ff]/g, "aa");//全角片假文 return tempstr.length;
    }65381(\uff65)是个半角圆点,应该也存在的,我见过,不应忽略
    上面的方法可以扩展到其他字符,中文,韩文,只要你知道utf-8的内码范围
      

  6.   

    反正用\un-\un1,你可以添加匹配范围的,我只是举个例