1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

バリデーションの正規表現

Last updated at Posted at 2021-02-15

WHY

今日は正規表現で漢字、ひらがな、カタカナでのみ入力するというバリデーションの記述方法などを学んだのでアウトプットしていきます。


結果から言うと

VALID_NAME_REGEX =/\A[ぁ-んァ-ン一-龥々]+\z/

with_options presence: true do
validates :last_name, format: { with: VALID_NAME_REGEX, message: 'Full-width characters.' }
validates :first_name, format: { with: VALID_NAME_REGEX, message: 'Full-width characters.' }
end

でLGTMもらったのですが、


最初に提出した時は...
with_options presence: true do
validates :last_name, format: { with: /\A[ぁ-んァ-ン一-龥]/, message: 'Full-width characters.' }
validates :first_name, format: { with: /\A[ぁ-んァ-ン一-龥]/, message: 'Full-width characters.' }
end

こう書いてしまっていました、、、。
変数の定義は知らなかったということでさておき、正規表現においてはいま改めて見るとめちゃめちゃ恥ずかしい限りです、、、

正規表現の内容について

自分の書いた正規表現を前にも紹介したサイトで見てみます。
https://regexper.com/
せいき2.png

Aは文字列の先頭と言う意味ですね。
そして末尾が指定されてません、これだと末尾に数字をいれても通ってしまいます...
なのでアンカーの「\z」を付け足します。
せいき3.png
これで末尾をつけることができましたが、まだこのままだと中の箱の中は一回しか役割を果たしません、これを繰り返すのに「」をつけます。
せいき1.png
これで文頭から末尾まで適応されます。
ですがこのままだと全国の佐々木さんに謝らなければいけなくなるので「」という字も足します。
せいき4.png
これで佐々木さんが入力できます!


バリデーションの記述について

これで無事に漢字、ひらがな、カタカナで入力させることができましたが、
バリデーションでは同じ正規表現を複数回記述する場合、変数化してまとめることが推奨されるらしいです。
上のwithオプションの表現は全く同じものを2回繰り返しているので変数化します。

VALID_NAME_REGEX =/\A[ぁ-んァ-ン一-龥々]+\z/

あとはwithオプションにこの変数を使っていけば問題なくバリデーションできます。


正規表現の感覚がまだつかめていないですけど少しずつ学んでいけたらなとおもいます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?