Rails|Emailのバリデーション
背景
はじめはemail_validatorを使用していたのですが、
「hogehoge@hoge.com」のように入力された時、うまくバリデーションがかからなく・・・。
あらためて調べてみると、以下の場合はうまくバリデーションがかかっていないようでした。
- 先頭に半角/全角スペース許容してる
- 全角を許容してる
うーむ、困った。
解決方法
1.email_validatorに代わってvalidates_email_format_ofを使用する
- @前は64文字以内であること
- 全角は弾く
- 先頭/email中/末尾の全角スペースは弾く
- email中の半角スペースは弾く
上記ちゃんとチェックしてくれているようです。
2.先頭/末尾の半角スペースを弾く
バリデーションをかける前に、不要なスペースを排除します。
Stringクラスのstrip
は前後の空白文字を削除してくれる強いやつ。
class User < ActiveRecord::Base before_validation :remove_space # バリデーション前に前後の空白文字を削除 def remove_space self.email.strip! end # validations validates_presence_of :email, message: "入力必須です。" validates_length_of :email, in: 0..100, message: "100文字以内で入力ください。", if: :email? validates :email, :email_format => {:message => '正しいメールアドレスの形式で入力ください。'} end