「ひらがな判定」で何をチェックしたいのか
まずゴールをはっきりさせます。
ひらがな判定には、大きく二つのニーズがあります。
「この文字列は“全部ひらがなだけ”かを判定したい」
「この文字列に“ひらがなが1文字でも含まれているか”を知りたい」
業務だと、例えば次のような要件がよく出ます。
ふりがな入力欄は「ひらがなのみ」にしたい。
名前の読みが「ひらがな以外を含んでいたらエラー」にしたい。
ここでは、この二つをきちんと分けてユーティリティ化していきます。
ひらがなの Unicode 範囲をざっくり理解する
JavaScript の正規表現では、「ひらがな」を Unicode の範囲で表現できます。
ひらがなは \u3040 〜 \u309F にまとまっています。
これを使うと、
/[\u3040-\u309F]/
JavaScriptで「ひらがな1文字」を表現できます。
この範囲をベースに、「含んでいるか」「だけか」を作り分けます。
「ひらがなを1文字でも含むか」を判定する
containsHiragana の実装
まずは、「この文字列にひらがなが1文字でも含まれているか?」を判定する関数です。
function containsHiragana(value) {
if (value == null) return false;
const s = String(value);
if (s === "") return false;
const re = /[\u3040-\u309F]/;
return re.test(s);
}
JavaScriptここでやっていることはシンプルです。
null / undefined は即 false。
数値が来ても判定できるように String(value) で文字列化。
空文字は false。[\u3040-\u309F] が1文字でも含まれているかを test でチェック。
動きのイメージ
containsHiragana("やまだたろう"); // true
containsHiragana("山田たろう"); // true(漢字+ひらがな)
containsHiragana("Yamada"); // false
containsHiragana("ヤマダタロウ"); // false(半角カナのみ)
JavaScript「日本語のふりがなが入っているか?」をざっくり見るには、これで十分です。
「全部ひらがなだけか」を判定する
isHiraganaOnly の実装
ふりがな入力欄などでは、
「漢字やカタカナ、英数字が混ざっていたらダメ」
「ひらがなだけにしてほしい」
という要件がよくあります。
その場合は、「ひらがな以外が混ざっていないか」をチェックします。
function isHiraganaOnly(value) {
if (value == null) return false;
const s = String(value).trim();
if (s === "") return false;
const re = /^[\u3040-\u309F]+$/;
return re.test(s);
}
JavaScriptここが重要ポイントです。
trim() して前後の空白を削る(うっかりスペースを入れても救済したい場合)。^[\u3040-\u309F]+$ は「先頭から末尾まで、ひらがなだけが1文字以上」という意味。
つまり、「ひらがな以外が1文字でも混ざっていたら false」。
動きのイメージ
isHiraganaOnly("やまだたろう"); // true
isHiraganaOnly(" やまだたろう "); // true(前後の空白は trim 済み)
isHiraganaOnly("山田たろう"); // false(漢字が混ざっている)
isHiraganaOnly("ヤマダタロウ"); // false(半角カナ)
isHiraganaOnly("やまだたろう1"); // false(数字が混ざっている)
JavaScript「ふりがなはひらがなだけにしてください」という要件に、そのまま使えます。
半角カナやカタカナをどう扱うかを決める
「ひらがな+カタカナもOK」にしたい場合
場合によっては、
「ふりがなはひらがな推奨だけど、カタカナも許可したい」
ということもあります。
その場合は、許可する文字の範囲を広げます。
カタカナは \u30A0-\u30FF です。
function isKanaOnly(value) {
if (value == null) return false;
const s = String(value).trim();
if (s === "") return false;
const re = /^[\u3040-\u309F\u30A0-\u30FF]+$/;
return re.test(s);
}
JavaScriptこれで、「ひらがな+カタカナだけ」を許可できます。
半角カナをどうするか
半角カナ(ヤマダ など)は \uFF61-\uFF9F にあります。
もし「半角カナも許可したい」なら、範囲に足します。
const re = /^[\u3040-\u309F\u30A0-\u30FF\uFF61-\uFF9F]+$/;
JavaScriptただし、半角カナは見た目も崩れやすく、
業務システムでは「禁止」にすることも多いので、
まずは「ひらがなだけ」から始めて、必要になったら広げるのがおすすめです。
業務での具体的な使いどころ
フロントエンドのふりがな入力チェック
よくあるパターンは、「氏名」と「ふりがな」がセットになっているフォームです。
const furigana = furiganaInput.value;
if (!isHiraganaOnly(furigana)) {
showError("ふりがなは、ひらがなのみで入力してください。");
}
JavaScriptこれだけで、
漢字混じりのふりがな
カタカナだけのふりがな
英数字混じりのふりがな
を簡単に弾けます。
バックエンド側のバリデーション
API でふりがなを受け取るときにも、
最低限の形式チェックをしておくと、
明らかにおかしいデータが DB に入るのを防げます。
function validateFuriganaOrThrow(value) {
if (!isHiraganaOnly(value)) {
throw new Error("Invalid furigana (must be hiragana only)");
}
}
JavaScriptフロントとバックの両方で同じユーティリティを使うと、
ルールのブレも防げます。
設計として意識してほしいこと
「含んでいるか」と「だけか」を関数レベルで分ける
ひらがな判定には、少なくとも二つの用途があります。
ひらがなを1文字でも含んでいるか(containsHiragana)
ひらがなだけで構成されているか(isHiraganaOnly)
これを一つの関数に詰め込むと、
「この関数、何をどこまで見ているんだっけ?」と分かりづらくなります。
なので、目的ごとに関数を分けておくと、
呼び出し側のコードも読みやすくなります。
「どこまでを許可するか」をユーティリティに閉じ込める
ひらがなだけか。
ひらがな+カタカナもOKか。
半角カナも含めるか。
この「許可範囲」を画面ごとにバラバラに書き始めると、
後から仕様変更するときに地獄を見ます。
だからこそ、
containsHiragana
isHiraganaOnly
isKanaOnly
のようにユーティリティを一箇所にまとめておき、
「ひらがな・かな周りのルールはここが真実」と決めておくのが、
業務システムとしてのきれいな設計です。
ちょっとだけ手を動かしてみる
コンソールで、次のあたりを試してみてください。
containsHiragana("山田たろう");
containsHiragana("Yamada");
isHiraganaOnly("やまだたろう");
isHiraganaOnly("山田たろう");
isHiraganaOnly("ヤマダタロウ");
JavaScript「どこからが true で、どこからが false になるか」を体でつかんでみてください。
そのうえで、自分のプロジェクトに
export function containsHiragana(value) { ... }
export function isHiraganaOnly(value) { ... }
JavaScriptのようなユーティリティを一つ置いて、
「ひらがなかどうかを見たいときは、必ずここを通す」
というルールにしてみてください。
それだけで、あなたの文字列検証は
場当たり的な if と正規表現から、
意図の通った「ひらがな判定ユーティリティ」に一段レベルアップします。
