テキストの文字数カウント — スペース含む・含まない
スペースを含む・含まないオプション付きでテキストの文字数をカウントします。正確な文字カウントのために、文字、コードポイント、書記素クラスタの違いを理解しましょう。
Basic Counting
詳細な説明
文字カウント:見た目以上に奥が深い
文字カウントは簡単に見えます — 文字列の .length を使えばいいだけですよね?実際には「文字」はコンテキストによって異なる意味を持ち、正確なカウントにはUnicodeの理解が必要です。
基本的な文字カウント
最もシンプルなアプローチはスペースを含むすべての文字を数えます:
const totalChars = text.length;
const charsNoSpaces = text.replace(/\s/g, "").length;
ただし、JavaScriptの .length は可視文字の数ではなくUTF-16コードユニットの数を返します。この区別は絵文字や特定の文字体系で重要になります。
文字 vs. コードポイント vs. 書記素クラスタ
「👨💻」(男性テクノロジスト)の絵文字を考えてみましょう:
- UTF-16コードユニット — JavaScriptでは
"👨💻".lengthは7(ZWJシーケンスのエンコーディングによる) - Unicodeコードポイント —
[...text].lengthでコードポイント数を取得 - 書記素クラスタ — ユーザーが1つの文字として認識するもの
ユーザー向けの文字カウントには、通常書記素クラスタが正しい単位です:
const segmenter = new Intl.Segmenter("en", { granularity: "grapheme" });
const graphemeCount = [...segmenter.segment(text)].length;
スペース含む vs. 含まない
ほとんどの文字カウンターは両方のモードを提供します:
| モード | 含むもの | 用途 |
|---|---|---|
| スペース含む | すべての文字 | SMS制限、データベースフィールド長 |
| スペース含まない | 非空白文字のみ | 翻訳料金、組版 |
特殊文字
- 改行 (
\n、\r\n) — プラットフォームによって1文字または2文字としてカウント - タブ (
\t) — 視覚的な幅に関係なく常に1文字 - ゼロ幅文字 —
\u200B(ゼロ幅スペース)、\uFEFF(BOM)は不可視だがカウントされる
実用的な制限
一般的な文字制限:Twitter/Xの投稿(280文字)、SMSメッセージ(GSM-7で160文字、Unicodeで70文字)、メタディスクリプション(155-160文字)、HTMLタイトルタグ(50-60文字)。正確な文字数を知ることで、これらの境界内に収めることができます。
ユースケース
文字カウントはソーシャルメディア投稿(Twitter/Xの280文字制限)、SMSメッセージ(160文字制限)、SEOメタディスクリプション(155-160文字)、データベースフィールドのバリデーション、文字単位で課金する翻訳サービスに不可欠です。開発者もフォーム入力の長さバリデーションに使用します。