length
文字列を単純にlength
でカウントすると結果は文字コードの数の合計となります。
'あ'.length // 1
'𩸽'.length // 2
'👨👩👧👦'.length // 11
𩸽
のようなサロゲートペア文字や、👨👩👧👦
のような連結された絵文字は正確にカウントできません。
文字単位でカウントする
以下のようにすることで文字単位でカウントできます。
function countCharacters(str: string) {
const characterCount = [...str].length
return characterCount
}
countCharacters('あ') // 1
countCharacters('𩸽') // 1
countCharacters('👨👩👧👦') // 7
上記のようにサロゲートペア文字が文字単位でカウントされます。
👨👩👧👦
は['👨', '', '👩', '', '👧', '', '👦']
のように分割されてカウントされます。
書記素単位でカウントする
'👨👩👧👦'のような絵文字も1文字としてカウントする場合には以下のようにします。
export function countGraphemes(str: string) {
const segmenter = new Intl.Segmenter('ja-JP', { granularity: 'grapheme' })
const graphemeSegments = segmenter.segment(str)
const graphemeCount = Array.from(graphemeSegments).length
return graphemeCount
}
countGraphemes('あ') // 1
countGraphemes('𩸽') // 1
countGraphemes('👨👩👧👦') // 1