JS Day 34: 中英文字串長度判斷
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 国际许可协议 进行许可。