プログラミングガール

Developing a better me

Rails|Emailのバリデーション

背景

はじめはemail_validatorを使用していたのですが、
「hogehoge@hoge.com」のように入力された時、うまくバリデーションがかからなく・・・。
あらためて調べてみると、以下の場合はうまくバリデーションがかかっていないようでした。

  • 先頭に半角/全角スペース許容してる
  • 全角を許容してる

うーむ、困った。


解決方法

1.email_validatorに代わってvalidates_email_format_ofを使用する

github.com

  • @前は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