半角カタカナが\xA1-\xDFで判定できない理由

入門 | 9分 で読める | 2026.06.17

公式ドキュメント

JavaScriptの正規表現で半角カタカナを扱う時、\xA1-\xDF と書くと、期待した半角カタカナの範囲にはなりません。

一言でいうと

JavaScript正規表現の \xA1-\xDF はU+00A1〜U+00DFを指し、半角カタカナのU+FF61〜U+FF9Fとは別の範囲です。

よくある誤り

const wrong = /[\xA1-\xDF]/;

console.log(wrong.test("ア")); // false

このパターンは、半角カタカナの を対象にしていません。

正しい範囲

半角カタカナをUnicode範囲で指定する場合は、U+FF61〜U+FF9Fを使います。

const halfwidthKatakana = /[\uFF61-\uFF9F]/;

console.log(halfwidthKatakana.test("ア")); // true
console.log(halfwidthKatakana.test("ア")); // false

は全角カタカナで、U+30A2です。 は半角カタカナで、U+FF71です。

なぜ間違えやすいのか

古い文字コードやShift_JISの知識と、Unicodeの範囲指定が混ざると混乱します。

表記JavaScript正規表現での意味
\xA1U+00A1
\xDFU+00DF
\uFF61U+FF61
\uFF9FU+FF9F

JavaScriptの文字列と正規表現はUnicodeを前提に考える必要があります。

全角・半角判定の例

ASCII印字可能文字と半角カタカナを半角扱いにする例です。

const halfwidthPattern = /^[\x20-\x7E\uFF61-\uFF9F]+$/;

console.log(halfwidthPattern.test("ABC123")); // true
console.log(halfwidthPattern.test("アイウ")); // true
console.log(halfwidthPattern.test("アイウ")); // false

この場合、半角として許可する範囲を明示しています。

否定で書く時の注意

「半角以外を含むか」を見るなら、否定文字クラスを使えます。

const hasNonHalfwidth = /[^\x20-\x7E\uFF61-\uFF9F]/;

console.log(hasNonHalfwidth.test("ABCアイ")); // false
console.log(hasNonHalfwidth.test("ABCアイ")); // true

ただし、何を半角扱いするかは用途に合わせて決めます。

入力チェックでは「全角かどうか」より先に「許可する文字範囲」を決めます。

よくある誤解

誤解実際
\xA1-\xDF は半角カタカナJavaScriptではU+00A1〜U+00DFです
半角カタカナはASCIIの近くにあるUnicodeではU+FF61〜U+FF9Fです
全角判定は1つの正規表現で万能用途ごとに定義が必要です
u フラグを付ければ範囲ミスが直る範囲指定そのものが違えば直りません

まとめ

JavaScript正規表現で半角カタカナを判定するなら、\uFF61-\uFF9F を使います。\xA1-\xDF はU+00A1〜U+00DFであり、半角カタカナとは別のUnicode範囲です。

参考リソース

← 一覧に戻る
PR
PR
PR
PR