ひらがなの範囲は U+3040 から、で合っているのか。 正規表現で漢字だけ拾いたいのに、「々」や「𠮷」が抜け落ちる。 Unicode の表を探しても、巨大すぎて目当てのブロックにたどり着けない。 主要な約50ブロックの範囲を一覧にして、選んだブロックの文字を並べ、そのまま使える正規表現の範囲指定も出します。文字を入れると、どのブロックに属するかも分かります。
使い方
- いちばん上の欄に文字を入れると、1文字ずつコードポイントと所属ブロックが表に出ます。初期値の「あア漢Aー😀」で、ブロックがばらけるのが分かります。
- ブロック一覧は、名前(Hiragana、kana など)、日本語名、16進の数字(3040 など)で絞り込めます。数字は、その値を含むブロックを探します。
- 行の「表示」を押すと、下の文字グリッドが切り替わります。256字ずつのページ送りです。
ここまでが調べ物の流れです。
- グリッドのマスを押すと、UTF-8、UTF-16、JavaScript の書き方(
あなど)、HTML の数値参照、一般カテゴリが出ます。 - 一番下に、そのブロックの正規表現がコピーボタン付きで並びます。
灰色のマスは、未割り当ての番号か、表示できない文字(制御文字、空白、サロゲート、私用領域)です。結合文字は点線の丸付きで出ます。
仕組み・計算式
ブロックの範囲は、Unicode Consortium が公開している Blocks.txt の定義に合わせています。各ブロックは16の倍数から始まり、16の倍数の手前(末尾が F)で終わります。画面の一覧の全54ブロックが、並び順と、この境界の規則を満たすことを確かめました。
UTF-16 は、RFC 2781 に定められた方式です。U+FFFF までの文字は16ビット1つで表します。U+10000 以上は、コードポイントから 0x10000 を引き、上位10ビットを D800 に、下位10ビットを DC00 に足してサロゲートペアにします。たとえば U+1F600 は D83D DE00 です。
なお一覧は主要なブロックだけです。Blocks.txt にはもっと多くのブロックがありますが、検索でよく見かけるものを優先しました。一覧にない文字を入れると「この一覧にないブロック」と表示します。
「未割り当て」かどうかは、お使いのブラウザが持つ Unicode のデータで判定しています。ブラウザが古いと、新しい文字がまだ未割り当てに見えることがあります。
計算例
数字は、script.js の関数と JavaScript の正規表現を node で実行して確かめました。
例1: ひらがなの範囲
ひらがなブロックは U+3040〜U+309F の96コードポイントです。/^[-ゟ]+$/ は「ひらがな」に一致します。ところが「らーめん」には一致しませんでした。意外だったのは理由で、長音の「ー」が U+30FC で、カタカナブロックにあることでした。ひらがなの文章に「ー」が混ざるのは普通ですよね。ー を足した /^[-ゟー]+$/ なら一致します。
例2: 漢字の範囲
CJK統合漢字は U+4E00〜U+9FFF の20,992字で、グリッドは82ページになります。/[一-鿿]/ に「々」は一致しません。「々」は U+3005 で、CJKの記号及び句読点のブロックだからです。
例3(境界値): U+309F と U+30A0
ひらがなブロックの最後は U+309F「ゟ」、次の U+30A0「゠」からカタカナブロックです。境界が1違いで、見た目の印象とずれます。ひらがなブロックの先頭 U+3040 と、U+3097、U+3098 は、手元の node(Unicode 17 のデータ)では未割り当てでした。つまり、このブロックに実際にあるのは96字のうち93字です。
例4: BMP の外
「𠮷」は U+20BB7 で、CJK統合漢字拡張Bに入ります。/[一-鿿]/ には一致せず、.length も2になります。/[\u{4E00}-\u{9FFF}\u{20000}-\u{2A6DF}]/u なら一致しました。
よくある間違い
1. ブロックの範囲と文字の種類を同じものだと考える
「々」や「ー」のように、ブロックと用途がずれる文字があります。ひらがなだけを判定したいなら、ブロックの範囲よりも、実際に使う文字を洗い出して決めるほうが確実です。
試して分かったのは、JavaScript の \p{Script=Hiragana} でも「ー」は一致しないことでした。\p{Script_Extensions=Hiragana} なら一致します。なお JavaScript の \p{} では、Script や一般カテゴリは使えても、ブロック名(\p{Block=Hiragana})は使えず、node ではエラーになりました。
2. u フラグなしで BMP の外を指定する
[\u{20000}-\u{2A6DF}] を u フラグなしで正規表現にすると、node では「Range out of order」のエラーになりました。BMP の外を指定するときは、u フラグを付けてください。
3. 全角と半角を同じブロックだと思う
「ア」は U+FF71、「A」は U+FF21 で、どちらも「半角・全角形」ブロックです。「ア」(U+30A2) のカタカナブロックとは別の場所にあります。「〜」(U+301C) と「~」(U+FF5E) も別のブロックなので、文字化けや照合のずれの原因になります。
よくある質問
Q. 絵文字は1つのブロックにまとまっていますか?
A. まとまっていません。入力欄に「😀」を入れると顔文字ブロック(U+1F600〜U+1F64F)でしたが、「☀」はその他の記号(U+2600)、「❤」は装飾記号(U+2764)に入りました。絵文字を一括で判定するなら、ブロックではなく Emoji の属性を使うほうが向いています。
Q. 一覧にないブロックは調べられますか?
A. このツールでは調べられません。判定欄では「この一覧にないブロック」と出ます。
Q. 範囲の末尾まで文字があるのですか?
A. 全部にあるとは限りません。たとえばひらがなブロックには、未割り当てが3つあります。グリッドの灰色のマスが目印です。
Q. グリッドの文字が□や空白になります。
A. ブラウザやOSにその文字のフォントがないためです。コードポイントの情報(UTF-8、UTF-16)は、マスを押せば確認できます。
関連ツール
最終更新・根拠の確認日: 2026-10-12 · カテゴリ: テキスト