//带中文字符串长度,一个中文字长度为2
String.prototype.lenB = function(){return this.replace(/[^\x00-\xff]/g,"**").length;}
document.all.tes1.value.lenB();
String.prototype.lenB = function(){return this.replace(/[^\x00-\xff]/g,"**").length;}
document.all.tes1.value.lenB();
str="カワシあなだ";alert(str.length);
</script>
utf-8下面获得的值就是6,加入英文数字也一样的
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之间,希望能否指点清楚一点!!
{
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;
}
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的内码范围