心はいつもAirPucci (空元気でもいいから)

毎日がPucciを着ているような気分

RailsTutorial4.0を高速で復習する。6.2.4章。

   


6.2.4フォーマットを検証する
です。

メールアドレスは文字数制限だけじゃだめで、foo@example.comの形式になってないとダメです。

で、ドメインやメアド形式を調べていたのですが、ドメイン取得業者にインストラクションが無いんですよね、よくないなあ。RFCレベルの知識くらい噛み砕いて解説掲載してほしい。

メアド形式について調べる

verisignや色々検索してメアド形式について勉強します。

.がある
@がある、ただし1個だけ
-以外の記号はドメインに使用してはダメ

テストを書く

リスト6.13 メールアドレスフォーマットの検証テスト。
spec/models/user_spec.rb

require 'spec_helper'
略
  describe "emailフォーマットのテスト" do
    it "emailフォーマットが不正な場合" do
      addresses = %w[user@foo,com user_at_foo.org example.user@foo.
                     foo@bar_baz.com foo@bar+baz.com]
      addresses.each do |invalid_address|
        @user.email = invalid_address
        expect(@user).not_to be_valid
      end
    end

    it "emailフォーマットが正しい場合" do
      addresses = %w[user@foo.COM A_US-ER@f.b.org frst.lst@foo.jp a+b@baz.cn]
      addresses.each do |valid_address|
        @user.email = valid_address
        expect(@user).to be_valid	<li>
      end
    end
  end
end

不正フォーマット例として

  • user@foo,com
  • user_at_foo.org
  • example.user@foo.
  • foo@bar_baz.com
  • foo@bar+baz.com

正しいフォーマット例として

  • user@foo.COM
  • A_US-ER@f.b.org
  • frst.lst@foo.jp
  • a+b@baz.cn

を検証しています。

現状、空入力をはじく以外何もフォーマットチェックしていないので、不正フォーマットを不正と判断する能力はなく、エラーになるはず。

1) User emailフォーマットのテスト emailフォーマットが不正な場合
Failure/Error: expect(@user).not_to be_valid
expected # not to be valid

なりました。

メールアドレスのフォーマット検証を行うアプリケーションコード

モデルに書いて行きます。こういうのこそ、なにか素敵メソッド!と思いますがRailsTutorialでは頑張って正規表現で書いて行きます。

リスト6.14 正規表現を使ったメールアドレスフォーマットの検証。
app/models/user.rb

class User < ActiveRecord::Base
  validates :name,  presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }
end

validatesメソッドの:format引数に、フォーマットを定義するための正規表現を与えてます。
Ruby on Rails API仕様のvalidatesにも書いてあります。

The validators hash can also handle regular expressions, ranges, arrays and strings in shortcut form.

validates :email, format: /@/
validates :gender, inclusion: %w(male female)
validates :password, length: 6..20

で、正規表現て何よ?になるわけです。
メアドの正規表現に関してはもうおまえらPHPerは正規表現をブログにうpするんじゃねえ! と言われてしまうほどで、これを書けばオK!みたいのが見つかりません。。

とりあえず実装してテストすると今度はパスしました。
次は、
6.2.5一意性を検証する
です。

 - テクニカル ,

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

no image
RailsTutorial4.0を高速で復習する。11.2.4章。

11.2.4[フォローする] ボタン (標準的な方法)、です。 仕様 それぞれの …

RailsGirls松江からのぉ〜東京More!*既に2回目

RailsGirls東京3回目に申し込みそびれた流れから松江に参加し、チューター …

no image
Everyday Rails頑張る。3章モデルスペック

テスト書いてからコードの決意。 今のような環境がない時代のプログラマでしたが、自 …

no image
formatはどこから取ってくる?

ruby on rails3プリケーションプログラミングの本の内容をruby2. …

RailsTutorial4.0を高速で復習する。9章。

8章で随分おなかいっぱいになりました。 第9章 ユーザーの更新・表示・削除、です …

no image
Rails 3.2と4.0、複数バージョンをインストールする

Rubyを複数バージョン入れて切り替えて使える事を確認しました。次はRailsを …

no image
gamilアカウントが乗っ取られました

朝起きてすぐ行うメール確認。iphoneでgmail接続できないってエラーが出る …

アイキャッチ画像のリサイズ

768 × 1024 pxの写真をアイキャッチに指定して、150pxにリサイズ表 …

no image
destory

ruby on rails3プリケーションプログラミングの本の内容をruby2. …

no image
RailsTutorial4.0を高速で復習する。3.3.3章。

3.3.3埋め込みRubyです。viewにrubyコードを埋め込んでtitleを …