1. 程式人生 > >js 中文字串的友好擷取

js 中文字串的友好擷取

在顯示字串的時候,避免字串過長往往會對字串進行擷取操作,通常會用到js 的 substr 或者 substring方法, 以及 字串的length屬性

對於非中文的字串處理是很簡單的,但是中文字元的 length  屬性值 是1  而不是 2 ,所以處理就不是很友好了。

例如  你有一個字串  1234567890   和  一二三四五六七八九零, 

你只想顯示五位長度,往往會這樣操作  str = str.substr(0, 5);

但是 12345  與 一二三四五 所佔的寬度是不同的,因為中文往往佔2位元組, 為了顯示效果更好,

故封裝下面的js, 他會辨別中文字元的 length 為2

$.String.Substr = function (str, n) {//字串擷取 包含對中文處理
    if (str.replace(/[\u4e00-\u9fa5]/g, "**").length <= n) {
        return str;
    }
    else {
        var len = 0;
        var tmpStr = "";
        for (var i = 0; i < str.length; i++) {//遍歷字串
            if (/[\u4e00-\u9fa5]/.test(str[i])) {//中文 長度為兩位元組
                len += 2;
            }
            else {
                len += 1;
            }
            if (len > n) {
                break;
            }
            else {
                tmpStr += str[i];
            }
        }
        return tmpStr + " ...";
    }
};