見出し画像

正規表現を用いて登録してほしいデータに制限を設ける @TECH CAMP #20

 随分と間が空いてしまいましたが、気づけばこのシリーズも20回目を迎えられました。最終課題真っ只中のとだです。

 今回も簡単にアウトプットします。Webアプリケーションで、ユーザーに個人情報を新規登録してもらうことがあると思います。その時入力フォームに、必須項目があったり、名前を全角で入力してもらったり、パスワードを8文字以上入れてもらったり等、色々な条件を提示することがあります。今回はそんな条件を満たさせるために、正規表現を用いてバリデーションを設ける方法を紹介します。

モデルにバリデーションを設ける

 基本的にユーザー新規登録についてのバリデーションはuserモデルを作成し、そこにバリデーションを記述することが多いと思います。今回もdeviseという大変便利なgemを導入して作成する前提で話を進めたいと思います。

 まず、全体像をお見せします。今回は、新規登録をしてもらうユーザーには、「メールアドレス」「パスワード」「ニックネーム」「苗字と名前」「苗字と名前(カナ)」「誕生日」を登録してもらうことにします。
 今回は「メールアドレス」と「苗字と名前」と「苗字と名前(カナ)」に正規表現を用いて制限を設けます。

class User < ApplicationRecord
 # Include default devise modules. Others available are:
 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
 devise :database_authenticatable, :registerable,
        :recoverable, :rememberable, :validatable
 validates :nickname,
   presence: true
 validates :email,
   format: { with: /\A[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*\z/},
   presence: true
 validates :first_name,
   format: { with: /\A([ぁ-んァ-ン一-龥]|ー)+\z/},
   presence: true
 validates :last_name,
   format: { with: /\A([ぁ-んァ-ン一-龥]|ー)+\z/},
   presence: true
 validates :first_name_kana,
   format: { with: /\A([ァ-ン]|ー)+\z/},
   presence: true
 validates :last_name_kana,
   format: { with: /\A([ァ-ン]|ー)+\z/},
   presence: true
 validates :birthday,
   presence: true
end

 上記の様にモデルファイルにバリデーションを記述します。正規表現を用いて入力フォームに入力される文字に制限を設けることが出来ます。

validates :登録するカラム名,
   format: { with: 正規表現}

 上記の型に正規表現を当てはめればOKです。
 当てはめる正規表現は自分もまだまだ勉強が必要なのですが、リファレンスからとても参考になるページがあるのでそれをみなさんに共有したいと思います。

Rubyのバリデーション用正規表現集
https://gist.github.com/nashirox/38323d5b51063ede1d41

 自分で書いた正規表現とは違ってスッキリしていますね…。まだまだだなあと思うばかりです。

 また、正規表現を入力するとどの様な制限になっているかわかりやすく図式化してくれるサイトがあります。

 ここで自分の書いた正規表現がどの様な条件を示しているか、自分の思い通りになっているか試してみるのもいいと思います。

 とりあえず今回はこんな感じで簡単にまとめました。正規表現についてはまだまだ自分も理解が浅いので勉強してまたアウトプットできる様に頑張ります。今回もここまで見ていただいてありがとうございました!

この記事が気に入ったらサポートをしてみませんか?