[javascript学习指南]Javascript获取中文字符长度与截取中文字符代码

更新时间:2018-02-18    来源:php应用    手机版     字体:

【www.bbyears.com--php应用】

获取含中文的字符串长度

实际开发应用中,例如字数限制排版时,由于一个中文占有两个英文字符的位置,对含有中文的字符串长度计算用String.length不太可靠。有两种方法解决

 代码如下


String.prototype.cnLength = function() {
    var arr = this.match(/[^x00-xff]/ig);
    return this.length + (arr == null ? 0 : arr.length);
};
 
alert("hi你好".cnLength());  //测试结果 6


方案二:

 代码如下

String.prototype.cnLength = function() {
    var len = 0;
    var ch;
    for (var i = 0; i < this.length; i++) {
        ch = this.charCodeAt(i);
        if (ch >= 0 && ch <= 255) {
            len++;
        }
        else {
            len += 2;
        }
    }
    return len;
};
 
alert("hi你好".cnLength());  //测试结果 6

经过长度为10000+的字符串测试,方案一用时约2ms,方案二用时约12ms。方案一完胜,再次体现了正则表达式的强大之处。


截取中文字符

 

 代码如下


<script type=”text/javascript”>
String.prototype.gblen = function() {
var len = 0;
for (var i=0; i if (this.charCodeAt(i)>127 || this.charCodeAt(i)==94) {
len += 2; 
} else {
len ++;
}
}
return len;
}
String.prototype.gbtrim = function(len, s) {
var str = ”;
var sp  = s || ”;
var len2 = 0;
for (var i=0; i if (this.charCodeAt(i)>127 || this.charCodeAt(i)==94) {
len2 += 2;
} else {
len2 ++;
}
}
if (len2 <= len) {
return this;
}
len2 = 0;
len  = (len > sp.length) ? len-sp.length: len;
for (var i=0; i if (this.charCodeAt(i)>127 || this.charCodeAt(i)==94) {
len2 += 2;
} else {
len2 ++;
}
if (len2 > len) {
str += sp;
break;
}
str += this.charAt(i);
}
return str;
}
var str1 = ‘世界啊啊sssl发生的发生的法’;
document.write(‘str1 = ‘+ str1 +’
’);
document.write(‘length = ‘+ str1.gblen() +’
’);
document.write(‘gbtrim(10) = ‘+ str1.gbtrim(10) +’
’);
document.write(‘gbtrim(10, ’…’) = ‘+ str1.gbtrim(10, ‘…’) +’
’);
document.write(‘gbtrim(12, ’-’ ) = ‘+ str1.gbtrim(12, ‘-’) +’
’);

// gbtrim(len 截取长度,按英文字节长度计算, s截取后的省略字符,如”…” )
// 备注: 这里中文字符都是当作两个长度来计算的,所以gbtrim中的len为10时,是显示最多5个汉字的。
// 当汉字数大于5时,由于截取后加上“…”,所以只显示4个汉字。
// 注意中文编码
</script>

本文来源:http://www.bbyears.com/jiaocheng/39347.html

猜你感兴趣

热门标签

更多>>

本类排行