因:javascript中的String類內建的length屬性 和 substr()方法雖然能判斷和截取出字元個數,但是對位元組個數卻沒有處理的方法(眾所周知,中文字元佔兩個位元組,英文只佔一個)
果:中英文字元在頁面上的佔位空間存在差異。中文的web開發人員不能一刀切,對中英文都截取同樣長度的字元數。
網上大致有兩種方法處理中英文字元。一種是把中文字元escape了,然後計算位元組長度。一種是用Regex把中文字元轉換2個位元組的符號,然後計算長度
推薦第二種方法,簡單明了,速度快,效率高。
按照第二種方法,對javascript 的 String類型做以下擴充:
一.String.len() 方法,計算字串位元組個數:
1 String.prototype.len=function()
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 };
使用方法:最好寫成通用指令碼,放到所有指令碼前面,調用如下:
1 var a='tom正在測試中英文字元處理';
2 alert(a.len());
3 alert(a.sub(5));