點燈坊

失くすものさえない今が強くなるチャンスよ

如何取得中英文字串的字元數?

Sam Xiao's Avatar 2023-10-20

JavaScript 使用 Unicode 之後,無論是 中文英文 都視為一個字元,若想將中文 視為 兩個字元英文 視為 一個字元,則無法單純使用 ECMAScript 內建的 length()

Version

ECMAScript 2015

中文、英文、日文

let str1 = '你好'
let str2 = 'Hello'
let str3 = 'こんにちは'

let countCharacters = str => {
  let count = 0

  for (let i = 0; i < str.length; i++) {
    let charCode = str.charCodeAt(i)

    if (charCode > 127) {
      count += 2;
    } else {
      count++
    }
  }

  return count
}

countCharacters(str1) // ?
countCharacters(str2) // ?
countCharacters(str3) // ?

Line 9

let charCode = str.charCodeAt(i)
  • 取得每個字的 ASCII code

Line 11

if (charCode > 127) {
  count += 2;
} else {
  count++
}
  • ASCIII > 127 為 中文日文,視為 兩個字元
  • 其他則為 數字英文符號,視為 一個字元

中英文夾雜、日英文夾雜

let str1 = '你好Hello'
let str2 = 'こんにちはHello'

let countCharacters = str => {
  let count = 0

  for (let i = 0; i < str.length; i++) {
    let charCode = str.charCodeAt(i)

    if (charCode > 127) {
      count += 2;
    } else {
      count++
    }
  }

  return count
}

countCharacters(str1) // ?
countCharacters(str2) // ?
  • 中英文夾雜、日英文夾雜也能判斷

Conclusion

  • 這種方法不見適用於中文,也適用於日文