はじめに
カタカナの入力チェックを行う際に、躓いたため記録する。
※結構ざっくり書いているため参考程度に
カタカナを表す正規表現
カタカナの文字コード
ァ, ア, ィ, イ, ゥ, ウ, ェ, エ, ォ, オ, カ, ガ, キ, ギ, ク, グ, ケ, ゲ, コ, ゴ, サ, ザ, シ, ジ, ス, ズ, セ, ゼ, ソ, ゾ, タ, ダ, チ, ヂ, ッ, ツ, ヅ, テ, デ, ト, ド, ナ, ニ, ヌ, ネ, ノ, ハ, バ, パ, ヒ, ビ, ピ, フ, ブ, プ, ヘ, ベ, ペ, ホ, ボ, ポ, マ, ミ, ム, メ, モ, ャ, ヤ, ュ, ユ, ョ, ヨ, ラ, リ, ル, レ, ロ, ヮ, ワ, ヰ, ヱ, ヲ, ン, ヴ, ヵ, ヶ
このようになっている。
もし、〇ヶ月、〇カ所などをマッチさせたくない場合は「ヵ」「ヶ」を含まないよう正規表現を書く必要がある。
その場合は、***[ァ-ヴ]***とすることで対応可能。気にしない場合は[ァ-ヶ]でよい。
上記を踏まえ、以下のように実装した。
preg_match('/^[ァ-ヴ]+$/', $string);
今回は、フリガナの入力欄で入力値がカタカナであるかどうか判定する際にこの正規表現を用いたがなぜか一部文字をカタカナと認識できていないことが分かった。
一部文字を認識できていない問題について
実装して動作確認をしていると、「サ行」「ダ」「マ行の一部」など一部文字をカタカナとして認識できていないことが分かった。
原因を調べたところ、どうやらUTF-8では修飾子「u」を付ける必要があるとのこと。
他にも、大文字小文字にマッチするパターンなど様々なものがある。
preg_match('/^[ァ-ヴ]+$/u', $string);
これでうまく認識できた。
また、正規表現にパターン修飾子なるものがあるのも初めて知ったためとても勉強になった。