charCodeAtと数値比較で文字種を判定する

入門 | 12分 で読める | 2026.06.17

公式ドキュメント

今回やること

この記事では、正規表現を使わずに charCodeAt() と数値比較で文字種を判定します。

数値比較で判定すると、どのUnicode範囲を見ているのかがコード上で明確になります。

前提条件

  • Node.jsを実行できる
  • JavaScriptの関数とif文が読める
  • Unicode範囲は厳密な全文字対応ではなく、学習用に絞る

Step 1: 文字コードを表示する

charcode-check.js を作ります。

const samples = ["A", "0", "!", "あ", "ア", "ア"];

for (const char of samples) {
  const code = char.charCodeAt(0);
  console.log(char, code, code.toString(16));
}

実行します。

node charcode-check.js

toString(16) で16進数として確認できます。

Step 2: ASCII印字可能文字を判定する

function isPrintableAscii(char) {
  const code = char.charCodeAt(0);
  return code >= 0x20 && code <= 0x7e;
}

console.log(isPrintableAscii("A")); // true
console.log(isPrintableAscii("あ")); // false

U+0020〜U+007Eを許可します。

Step 3: 半角カタカナを判定する

function isHalfwidthKatakana(char) {
  const code = char.charCodeAt(0);
  return code >= 0xff61 && code <= 0xff9f;
}

console.log(isHalfwidthKatakana("ア")); // true
console.log(isHalfwidthKatakana("ア")); // false

半角カタカナは U+FF61〜U+FF9F です。

Step 4: 半角扱いの文字を判定する

ASCII印字可能文字と半角カタカナを半角扱いにします。

function isHalfwidthChar(char) {
  return isPrintableAscii(char) || isHalfwidthKatakana(char);
}

console.log(isHalfwidthChar("A")); // true
console.log(isHalfwidthChar("ア")); // true
console.log(isHalfwidthChar("あ")); // false

Step 5: 文字列全体を判定する

function isHalfwidthText(text) {
  for (const char of text) {
    if (!isHalfwidthChar(char)) {
      return false;
    }
  }
  return true;
}

console.log(isHalfwidthText("ABC123")); // true
console.log(isHalfwidthText("ABCアイ")); // true
console.log(isHalfwidthText("ABCあ")); // false

for...of を使うと、文字列をコードポイント単位で回せます。ただし、ここで見ている判定範囲はBMP内の文字を対象にしています。

Step 6: ビット演算版と比較する

ASCII判定だけなら、次のようにも書けます。

function isAsciiByBit(char) {
  const code = char.charCodeAt(0);
  return (code & 0xff80) === 0;
}

ただし、初心者向けやチーム開発では、数値比較の方が意図を読み取りやすいことが多いです。

高速化のためにビット演算を書く前に、まず読みやすい数値比較で正しく動く形を作ります。

よくあるエラー

エラーよくある原因確認すること
charCodeAt(0) がNaN空文字を渡している事前に空文字チェック
絵文字で想定外になるUTF-16コード単位の問題codePointAt() も検討
全角扱いの定義がぶれる許可範囲が曖昧仕様を先に決める
半角カタカナがfalse範囲を間違えている0xff610xff9f

まとめ

charCodeAt() を使うと、文字をUTF-16コード単位の数値として見られます。ASCII印字可能文字は 0x200x7e、半角カタカナは 0xff610xff9f で判定できます。実務では、ビット演算より読みやすい数値比較を優先する場面が多いです。

参考リソース

← 一覧に戻る
PR
PR
PR
PR