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