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

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

  関連記事

パーフェクトRuby 3章制御構造/メソッド/組み込み関数 3-1演算子

パーフェクトRuby2章の後は6章をやろうと思っていましたが、やっぱり順番にやっ …

WordPressの管理画面真っ白問題に対処しました

WordPressの自作テンプレを作ったはいいものの、管理画面が真っ白になって投 …

no image
RailsGirlsMore!でRailsTutorialのキモチワルイところがスッキリしました

RailsGirls松江からのぉ〜東京More!*既に2回目から1ヶ月半。またま …

no image
accepts_nested_attributes_for

everydayRailsやっていて、 phoneモデルのテストのところで ac …

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

3.6高度なセットアップ、です。 この節を飛ばしても次の章以降には何の影響もあり …

初めてのRuby8章 8.4特異メソッドと特異クラス

特異メソッドと特異クラス プログラムなんて、クラスの継承だけで書けてしまうのが良 …

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

10.3.3フィードの原型、です。 仕様の確認 ユーザーログイン後、トップページ …

初めてのRuby2章「配列とハッシュ」

Railsだってgemの一種!ってことで、Rubyの文法からちゃんとやりたいです …

no image
editとupdate

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

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

3.3.2タイトルのテストをパスさせる。です。 ひとまず、静的ページをhtmlの …