JS 判斷中英文字串長度的方法

在 JS 字串中,如果都中文,一個中文字為 2 bytes,一個音文字母是 1 bytes
但是 JS 會把中文字當作一個字來計算,如下:

"不會英文的工程師".length  // return 8
"nonenglishengineer".length // return 18

但是這樣最後對導致要計算長度會有錯誤的情況發生,要如何解決呢?

作法可以把中文字取代為 2 個英文字做取代,在計算長度,這樣計算總長度數值就會是我們要的結果,如下:

const getLengthTotal = str => 
  str.replace(/[^\x00-\xff]/g,"xx").length;

getLengthTotal("不會英文的工程師");  // return 16
getLengthTotal("不會英文nonenglish"); // return 18

也可以直接註冊在原形函式裡,如下:

String.prototype.lengthTotal = function() {
  if (str === null) return 0;
  if (typeof str !== "string") str += "";
  return this.replace(/[^\x00-\xff]/g,"xx").length;
};

console.log("不會英文nonenglish".lengthTotal()); // return 18

駐:此方法要注意 this 的指向。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *