因:javascript中的String类自带的length属性 和 substr()方法虽然能判断和截取出字符个数,但是对字节个数却没有处理的方法(众所周知,中文字符占两个字节,英文只占一个)
果:中英文字符在页面上的占位空间存在差异。中文的web开发人员不能一刀切,对中英文都截取同样长度的字符数。
网上大致有两种方法处理中英文字符。一种是把中文字符escape了,然后计算字节长度。一种是用正则表达式把中文字符转换2个字节的符号,然后计算长度
推荐第二种方法,简单明了,速度快,效率高。
按照第二种方法,对javascript 的 String类型做以下扩展:
一.String.len() 方法,计算字符串字节个数:
1
String.prototype.len
=
function
()
2 {
3 return this .replace( / [^\x00-\xff] / g, " rr " ).length;
4 }
2 {
3 return this .replace( / [^\x00-\xff] / g, " rr " ).length;
4 }
二.String.sub(endindex) 方法,从0开始截取endindex长度的字节数。
1
2 String.prototype.sub = function (n)
3 {
4 var r = / [^\x00-\xff] / g;
5 if ( this .replace(r, " mm " ).length <= n) return this ;
6 // n = n - 3;
7 var m = Math.floor(n / 2);
8 for ( var i = m; i < this .length; i ++ ) {
9 if ( this .substr( 0 , i).replace(r, " mm " ).length >= n) {
10 return this .substr( 0 , i) ; }
11 } return this ;
12 };
2 String.prototype.sub = function (n)
3 {
4 var r = / [^\x00-\xff] / g;
5 if ( this .replace(r, " mm " ).length <= n) return this ;
6 // n = n - 3;
7 var m = Math.floor(n / 2);
8 for ( var i = m; i < this .length; i ++ ) {
9 if ( this .substr( 0 , i).replace(r, " mm " ).length >= n) {
10 return this .substr( 0 , i) ; }
11 } return this ;
12 };
使用方法:最好写成公用脚本,放到所有脚本前面,调用如下:
1
var
a
=
'
tom正在测试中英文字符处理
'
;
2 alert(a.len());
3 alert(a.sub( 5 ));
2 alert(a.len());
3 alert(a.sub( 5 ));