首先先說一個方法,就是有中文的時候,計算真實的長度
function getRealLen( str ) {
return str.replace(/[^\x00-\xff]/g, 'aa').length; //這個把所有雙字節的都給匹配進去了
}
原理是利用正則把中文變成"aa"兩個字符串,然後計算長度
然後接下來是重點
/* *
用途:js中字符串超長作固定長度加省略號(...)處理
參數說明:
str:需要進行處理的字符串,可含漢字
len:需要顯示多少個漢字,兩個英文字母相當於一個漢字
*/
function beautySub(str, len) {
var reg = /[\u4e00-\u9fa5]/g,slice = str.substring(0, len),
cCharNum = (~~(slice.match(reg) && slice.match(reg).length)),
realen = slice.length*2 - cCharNum-1;
return str.substr(0, realen) + (realen < str.length ? "..." : "");
}
slice = str.substring(0, len):這裏是爲了先減少字符,達到優化
realen = slice.length*2 - cCharNum-1:這裏減1是爲了處理萬一超過字符串,不顯示多一個不是漢字的字符,
然後最後就是截取要求的字符,後面加上省略號(“...”)
測試
console.log(beautySub("12程序猿g共同方",5));