心はいつも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

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

  関連記事

Mac初期化。MavericksクリーンインストールUSB作る。

イラレやxcodeはMacBookAirに重すぎる、、そろそろ転売の時機なのかも …

herokuのWe’re sorry, but something went wrong.に苦しんだ

Rails3.2環境に戻してアプリを作ろうとしています。 herokuにpush …

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

6.3セキュアなパスワードを追加する、です。 パスワードはセキュアであるべきと思 …

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

10.2マイクロポストを表示する、です。 ポストの投稿ではなく、表示だけを先に作 …

no image
RailsTutorial4.0を高速で復習する。4章と4.1章。

さて、4章です。4章ではRubyに関する内容が多かったような記憶が。 動的なWe …

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

8.1.2サインインをテストする、です。 Signin(ログイン)失敗の場合 ロ …

no image
iPhoneのKindleアプリでChip Conley氏の本を読んでみました。その2

iPadの発売がようやく発表されました。私個人としては読書端末としての利用を期待 …

Rubyの聖地、松江でRailsGirls Matsueに参加しました

旧暦神在月にRubyイベントに参加したい!と思ったところ、狙ったようにRubyW …

no image
RailsTutorial4.0を高速で復習する。4.1章の途中から。

さて、4.1章の途中にある、変だなと思っている箇所、 リスト4.4 Homeペー …

no image
wordpressのサーバー移行したい

本当に自分の備忘録として。 サーバー移行したいなと考えています。 同時に、Wor …