心はいつも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
ToDoの管理方法

東大生はノートがきれいだとか、、 きれいに書いている暇があったら、頭に書いて覚え …

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

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

詳解 Objective-C 2.0 第3版 CHAPTER3 継承とクラス

[]多用といいメッセージキーワードといい、やっぱObjective-Cってキモチ …

SublimeText2をMacにインストールしてターミナルから起動できるようにする。

Windowsには秀丸っていう超優秀なテクストエディタがあって、無料でも使えるの …

OpneSSL,Readline,Libyamlをインストールする

先ほどインストールしたHomebrewを使って、rbenvをインストールしたいと …

画面キャプチャ系extension

現在メインブラウザはchromeを利用しています。画面キャプチャextensio …

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

3.2章は最初のテストです。 Railsチュートリアルは、アプリケーションの振る …

WordPress親テーマversion upに伴う、子テーマのバージョンアップ作業

WordPress子テーマの作り方で書いた通り、airpucciの現在のテーマは …

パーフェクトRuby 2章Rubyの基礎 2-5-5 クラスメソッド

p54 2-5-5 クラスメソッド インスタンスメソッドに対して、クラスに対して …

no image
Ruby1.9と2.0、複数バージョンのRubyをインストールする。

Ruby1.9 + Rails3.2もいいけど、Ruby2.0 + Rails4 …