【JavaScript】全角文字を2文字、半角文字を1文字としてカウントする方法

JavaScriptにおいて、文字列の長さを正確に計算することは、さまざまなアプリケーションで重要な役割を果たします。
特に、日本語などの全角文字と半角文字が混在する場合、これらを適切にカウントする必要があります。
この記事では、JavaScriptで全角文字を2文字、半角文字を1文字としてカウントする方法を紹介します。

スポンサーリンク

全角文字を2文字、半角文字を1文字としてカウントする関数の実装

function countCharacters(str) {
    let count = 0;
    for (let i = 0; i < str.length; i++) {
        const codePoint = str.codePointAt(i);
        if (codePoint >= 0x10000 && codePoint <= 0x10FFFF) {
            count += 2; // 全角文字
        } else {
            count += 1; // 半角文字
        }
    }
    return count;
}

const text = "あいうえおABCDE";
console.log(countCharacters(text)); // 出力: 12

この関数は、文字列を一文字ずつ走査し、Unicodeコードポイントを取得して、その値に基づいて全角文字と半角文字を区別し、カウントします。最終的に、全角文字を2文字、半角文字を1文字として合計の文字数を返します。

よくある質問(FAQ)

Q. JavaScriptで全角・半角の文字数を区別してカウントするには?
A. 全角文字を正規表現/[^\x00-\xff]/で検出し、全角は2、半角は1としてカウントします。Intl.SegmenterやencodeURIComponent()のバイト数を利用する方法もあります。
Q. 文字列が全角か半角か判定するには?
A. charCodeAt()で文字コードが0xFF60以上(全角の範囲)かどうかで大まかに判定できます。より正確にはUnicode範囲を確認するか、正規表現でマッチします。
Q. 全角英数を半角に変換するには?
A. String.prototype.replace()と正規表現を使い、全角ASCII範囲(U+FF01〜U+FF5E)を対応する半角文字(U+0021〜U+007E)に変換します。charCodeAt()で取得したコードから0xFEE0を引くと半角コードになります。

まとめ

JavaScriptで全角文字を2文字、半角文字を1文字としてカウントする方法を学びました。この方法を使用することで、文字列の長さを正確に計算し、文字列操作をより効果的に行うことができます。