はじめに
ユーザー登録機能等を実装する際のバリデーションルールに、例えば
氏名のフリガナには全角カタカナ
を、
口座名義には半角カタカナ
のみを入力させるようにしたい時があると思います。
そんな時に、どのような正規表現を使えば良いのかをご紹介します。
記事の修正について
【2021/5/6 更新】
コメントにていただいたご指摘を元に、
全角カタカナの正規表現を
/^[ァ-ヴー]+$/u
→ /\A[ァ-ヴー]+\z/u
に修正し、
また半角カタカナの正規表現を
/^[ヲ-゚]+$/u
→ /\A[ヲ-゚]+\z/u
に修正しました。
PHPの場合は、例えば全角カタカナの正規表現には/^[ァ-ヴー]+$/u
といったパターンが使用されるのを目にすることがあると思いますが、実はこれでは不完全であることがわかったためです。
詳細については、当記事のコメント欄か、以下の記事をご参照ください。
参考:
正規表現によるバリデーションでは ^ と $ ではなく \A と \z を使おう
全角カタカナのバリデーションルール
全角カタカナのバリデーションルールを設定するときは、以下のように正規表現を使うと、
全角カタカナと、全角カタカナ小文字、長音記号(ー)のみを許容するようにできます。
/\A[ァ-ヴー]+\z/u
キモとなる部分は[ァ-ヴー]
の部分ですが、この部分の意味としては
ァ-ヴ
は、文字コードの「ァ」から「ヴ」までの全角カタカナ
を意味し、ー
はまんま長音記号「ー」を意味しています。
なお、全角カタカナの文字コードの順番としては、以下のようになっています。
ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ
このうち、小文字の「ァ」から始まって、最後は「ヴ」までの範囲の全角カタカナが対象となっています。
カタカナの並び順って、綺麗に「アイウエオ」や「ァィゥェォ」、「カキクケコ」等となってはいないのですね。
Rubularというサイトで正規表現がマッチしているかを簡単に確認できるので便利です💡
なお、最後の「ヵ」、「ヶ」については、
「3カ所」や「1ヶ月」などに使われる文字なのですが、フリガナ等のカタカナとして含めたくないことの方が多いのではないかなと思います。
もし含めたい場合は、正規表現を
/\A[ァ-ヶー]+\z/u
とします。
ちなみに、全角カタカナの正規表現として
[ァ-ン]
というものも見かけますが、この場合「ヴ」が含まれなくなってしまいます。
半角カタカナのバリデーションルール
半角カタカナのバリデーションルールを設定するときは、以下のように正規表現を使うと、
半角カタカナと、半角カタカナ小文字、半角の長音記号(-)のみを許容するようにできます。
/\A[ヲ-゚]+\z/u
キモとなる部分は[ヲ-゚]
の部分ですが、この部分の意味としては
ヲ-゚
は、文字コードの「ヲ」から「゜」までの半角カタカナ
を意味します。
(濁点「゛」、半濁点「゜」の半角カタカナも含む)
なお、半角カタカナの文字コードの順番としては、以下のようになっています。
ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘノマミムメモヤユヨラリルレヒロワン゙゚
正規表現についてとても参考になる記事
そもそも正規表現のルールがよくわからん!基礎から学びたい!
という場合は、こちらのQiita記事が初心者向けにかなり丁寧に解説されていて、参考になりました。
初心者歓迎!手と目で覚える正規表現入門・その1「さまざまな形式の電話番号を検索しよう」