心はいつも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
MacBookAir 1日め

ようやくMacBookAir を購入しました。Dellノートがずっと調子悪かった …

Mac mini買いました。

Appleの新製品発表が近づいているというのに、Mac mini買ってしまいまし …

no image
Rubyの<< には3つの用法あり。

先週の#yokohamarbペアプロ画面をみていて

no image
電源が入らない!MacBookAirが真っ黒になりました。

iPhoneを買ったばかりの頃、iPhoneのメーラーを立ち上げても中身が表示さ …

no image
ヘルパーメソッドを自作する

便利なrailsのヘルパーメソッド。自分でも作れます。 作るときは、 アプリのd …

no image
Mac OS Xでftp × Cyberduck

WordPressにプラグインを入れたくてダウンロードしてきました。 そういえば …

Objective-C苦節3ヶ月アプリ作れるようになった

このブログairpucci.comのメニューにアプリ開発追加しました。 昨年秋よ …

no image
Macで.htaccessを表示する設定

MacBook Air2代目。以前は行っていた.(ドット)がついたファイルをMa …

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

6.3.5ユーザーを作成する、です。 userモデルはできています。開発用のデー …

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

巷にRails4本がなく、Rails3本をRails4でやってみようとしたところ …