JavaScript計算含中英文字的字串長度

比如

1
2
"中文abc".length    //return 5. 我們期望他回傳7
"abcdefg".length //return 6.

因為中文字節等於2 bytes
.length 回傳的數值卻會把中文字當1個字來計算
導致後續如substring、計算長度等作業造成錯誤

解決方法很簡單,只要將中文字取代成2個英文字後再來計算長度,就會得到我們想要的數值!

直接註冊原型函式,語法如下:

1
2
3
4
5
String.prototype.len=function(){ 
truereturn this.replace(/[^\x00-\xff]/g,"xx").length;
}

"中文abc".len(); // return 7

若不註冊,只想當一般function呼叫使用

1
2
3
4
5
function len(str){ 
truereturn str.replace(/[^\x00-\xff]/g,"xx").length;
}

len("中文abc"); //return 7

參考資料

javascript 中英文字符长度和截断处理