因:javascript中的String類自帶的length屬性 和 substr()方法雖然能判斷和截取出字符個數,可是對字節個數卻沒有處理的方法(衆所周知,中文字符佔兩個字節,英文只佔一個)javascript
果:中英文字符在頁面上的佔位空間存在差別。中文的web開發人員不能一刀切,對中英文都截取一樣長度的字符數。html
網上大體有兩種方法處理中英文字符。一種是把中文字符escape了,而後計算字節長度。一種是用正則表達式把中文字符轉換2個字節的符號,而後計算長度java
推薦第二種方法,簡單明瞭,速度快,效率高。web
按照第二種方法,對javascript 的 String類型作如下擴展:正則表達式
一.String.len() 方法,計算字符串字節個數:this
String.prototype.len=function() { return this.replace(/[^\x00-\xff]/g,"rr").length; }
二.String.sub(endindex) 方法,從0開始截取endindex長度的字節數。編碼
String.prototype.sub = function(n) { var r = /[^\x00-\xff]/g; if(this.replace(r, "mm").length <= n) return this; // n = n - 3; var m = Math.floor(n/2); for(var i=m; i<this.length; i++) { if(this.substr(0, i).replace(r, "mm").length>=n) { return this.substr(0, i) ; } } return this; };
三.根據unicode編碼範圍spa
String.prototype.gblen = function() { var len = 0; for (var i=0; i<this.length; i++) { if (this.charCodeAt(i)>127 || this.charCodeAt(i)==94) { len += 2; } else { len ++; } } return len; }
參考:http://blog.csdn.net/testcs_dn/article/details/21412303.net
charCodeAt()prototype
charCodeAt() 方法可返回指定位置的字符的 Unicode 編碼。這個返回值是 0 - 65535 之間的整數。
方法 charCodeAt() 與 charAt() 方法執行的操做類似,只不過前者返回的是位於指定位置的字符的編碼,然後者返回的是字符子串。
字符編碼:http://www.cnblogs.com/darr/p/5355178.html