1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【JavaScript】文字数カウント

Posted at

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

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?