Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
30
Help us understand the problem. What is going on with this article?
@nasuB7373

全角・半角カタカナのバリデーションルール設定方法(正規表現)

はじめに

ユーザー登録機能等を実装する際のバリデーションルールに、例えば
氏名のフリガナには全角カタカナを、
口座名義には半角カタカナのみを入力させるようにしたい時があると思います。
そんな時に、どのような正規表現を使えば良いのかをご紹介します。

記事の修正について

【2021/5/6 更新】
コメントにていただいたご指摘を元に、
全角カタカナの正規表現を
/^[ァ-ヴー]+$/u/\A[ァ-ヴー]+\z/u に修正し、

また半角カタカナの正規表現を
/^[ヲ-゚]+$/u/\A[ヲ-゚]+\z/u に修正しました。

PHPの場合は、例えば全角カタカナの正規表現には/^[ァ-ヴー]+$/uといったパターンが使用されるのを目にすることがあると思いますが、実はこれでは不完全であることがわかったためです。
詳細については、当記事のコメント欄か、以下の記事をご参照ください。

参考:
正規表現によるバリデーションでは ^ と $ ではなく \A と \z を使おう

全角カタカナのバリデーションルール

全角カタカナのバリデーションルールを設定するときは、以下のように正規表現を使うと、
全角カタカナと、全角カタカナ小文字、長音記号(ー)のみを許容するようにできます。

/\A[ァ-ヴー]+\z/u

キモとなる部分は[ァ-ヴー]の部分ですが、この部分の意味としては
ァ-ヴは、文字コードの「ァ」から「ヴ」までの全角カタカナを意味し、はまんま長音記号「ー」を意味しています。
なお、全角カタカナの文字コードの順番としては、以下のようになっています。

ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ

このうち、小文字の「ァ」から始まって、最後は「ヴ」までの範囲の全角カタカナが対象となっています。
カタカナの並び順って、綺麗に「アイウエオ」や「ァィゥェォ」、「カキクケコ」等となってはいないのですね。

ちゃんとマッチしてるかチェック↓
image.png

Rubularというサイトで正規表現がマッチしているかを簡単に確認できるので便利です💡

なお、最後の「ヵ」、「ヶ」については、
「3カ所」や「1ヶ月」などに使われる文字なのですが、フリガナ等のカタカナとして含めたくないことの方が多いのではないかなと思います。
もし含めたい場合は、正規表現を

/\A[ァ-ヶー]+\z/u

とします。

ちなみに、全角カタカナの正規表現として
[ァ-ン]というものも見かけますが、この場合「ヴ」が含まれなくなってしまいます。

半角カタカナのバリデーションルール

半角カタカナのバリデーションルールを設定するときは、以下のように正規表現を使うと、
半角カタカナと、半角カタカナ小文字、半角の長音記号(-)のみを許容するようにできます。

/\A[ヲ-゚]+\z/u

キモとなる部分は[ヲ-゚]の部分ですが、この部分の意味としては
ヲ-゚は、文字コードの「ヲ」から「゜」までの半角カタカナを意味します。
(濁点「゛」、半濁点「゜」の半角カタカナも含む)
なお、半角カタカナの文字コードの順番としては、以下のようになっています。

ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘノマミムメモヤユヨラリルレヒロワン゙゚

ちゃんとマッチしてるかチェック↓
image.png

正規表現についてとても参考になる記事

そもそも正規表現のルールがよくわからん!基礎から学びたい!
という場合は、こちらのQiita記事が初心者向けにかなり丁寧に解説されていて、参考になりました。
初心者歓迎!手と目で覚える正規表現入門・その1「さまざまな形式の電話番号を検索しよう」

30
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
30
Help us understand the problem. What is going on with this article?