メールアドレスのバリデーションを行うRailsプラグイン
独自に実装すると割とめんどいメールアドレスのバリデーションを行うプラグイン二種。
validates_format_ofでやってたけどプラグインあるなら使った方が楽だなということで。
validates_email_format_of
Railsify! > Plugins > validates_email_format_of
単純に正規表現によるフォーマットチェックでバリデーションを行うプラグイン。
インストール
ruby script/plugin install http://code.dunae.ca/validates_email_format_of/
サンプルコード
class User < ActiveRecord::Base
validates_email_format_of :email
end
validates_email_veracity_of
Railsify! > Plugins > validates_email_veracity_of
こちらはフォーマットチェックの他にドメインの存在チェックまで可能なプラグイン。
許可しないドメインも指定できるので、フリーメールのアドレスは不可、といったことも実装できる。
インストール
ruby script/plugin install http://svn.savvica.com/public/plugins/validates_email_veracity_of
サンプルコード
class User < ActiveRecord::Base
validates_email_veracity_of :email, :mx_only => true,
:invalid_domains => ["example.com", "example.co.jp"]
end
オプションをいろいろと指定できる。
オプション
オプション | 内容 | デフォルト |
---|---|---|
:message | エラーメッセージ | “is invalid.” |
:domain_check | ドメインの存在チェックを行うかどうか | true |
:mx_only | ドメインの存在に加えてMXレコードまでチェックする | false |
:timeout | ドメインルックアップのタイムアウトまでの時間(秒) | 2 |
:fail_on_timeout | タイムアウトした場合にバリデーション失敗とするかどうか | false |
:timeout_message | タイムアウトでバリデーション失敗した場合のエラーメッセージ | “domain is currently unreachable, try again later.” |
:invalid_domains | 許可しないドメインのリストを配列で指定する | [] |
:invalid_domain_message | 許可しないドメインのためにバリデーション失敗した場合のエラーメッセージ | “provider is not supported, try another email address.” |
正規表現比較
自作すると記号入りのアドレスとかへの考慮を忘れがちだったりするメールアドレスの正規表現。
微妙に決定版がないので困る。
二つのプラグインも別々のものを使っている。
validates_email_format_ofのコード。
Regex = /
^(
([A-Za-z0-9]+_+)|
([A-Za-z0-9]+-+)|
([A-Za-z0-9]+.+)|
([A-Za-z0-9]+++)
)*[A-Za-z0-9]+@
((w+-+)|(w+.))*w{1,63}.[a-zA-Z]{2,6}$
/ix
validates_email_veracity_ofのコード。
/A([^@s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})Z/i
ちなみに今まで使ってたコード。
/^[x01-x7F]+@(([-a-zA-Z0-9]+.)*[a-zA-Z]+|[d{1,3}.d{1,3}.d{1,3}.d{1,3}])$|^$/
メールアドレスに一致する正規表現より拝借。
Google先生に聞くと他にもいろいろ見つかるけど、どんな正規表現が一番使われているんだろうな。
“メールアドレスのバリデーションを行うRailsプラグイン” に対して2件のコメントがあります。
コメントは受け付けていません。
上のサンプルコードはvalidates_email_format_of :email のtypoですね。
おお、ご指摘ありがとうございます。
修正しておきました。