JS Day 34: 中英文字串長度判斷

有 N 人看过
let eng_string = 'abc'.length; // => 3
let chn_string = '一二三'.length;  // => 3
let mix_string = 'abc一二三'.length // => 6

中文一個字是2個 byte,英文一個字母是一個 byte。要計算一個中英文字串長度的話需要知道中文與英文 unicode 範圍。

漢字 (所有漢字,包含中文簡繁體)

方法

function getLength(str){ 
    console.log(str.replace(/[^\x00-\xff]/g,"OO"));
    return str.replace(/[^\x00-\xff]/g,"OO").length;
}

getLength('abc一二三'); // => 9

這個方法比較簡潔易懂。傳入函式的 str 只要符合非大小寫英文字母與數字的正則 [^x00-xff],都會被 OO 取代,變成 abcOOOOOO。

[\x00-\xff] regular expression 是 0 - 255 的 ASCII, 是 1 byte。 前面的 意思是。表示大於 255 的 ASCII 就是 2 bytes (漢字)。

'abcOOOOOO'.length  // => 9

中文的正則表達式

[\u4E00-\u9FFF] // 中文 Unicode Range

英文正則表達式 (A-Za-z)

[\u0041-\u005A\u0061-\u007A]

Reference:
JavaScript計算含中英文字的字串長度 — 只是個打字的

https://stackoverflow.com/questions/20396456/how-to-do-word-counts-for-a-mixture-of-english-and-chinese-in-javascript — StackOverflow

整理 Unicode 經常會使用到的內碼區域並透過 Regex 自動比對文字 — The Will Will Web

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。