2012-03-14 7 views
1

私のアプリケーションに登録できないように検証された電子メールドメインのリストを持っています。私は希望特定の電子メールドメインをブロックするためにユーザーモデルの検証を追加する方法

BAD_DOMAINS = [/10minutemail.com/, /yopmail.com/, /mail/ 

10minutemail.com、yopmail.com、mail.com、mail.ru等...

私はそうのように私のユーザモデルにおけるドメインのリストを持っていますユーザーがこれらのドメインの1つに登録している場合、ユーザーは電子メールフィールドで検証してエラーを追加します。

BAD_DOMAINS.each { |rule| return true if !domain.match(rule).nil? } 

私はその正規表現を使用していますが、どのようにそれを検証として追加しますか?私はこれを試してみました:

validates :email, :format => { : exclusion => BAD_DOMAINS, 
     :message => "%{value} no good." } 

おかげ

答えて

2

をあなたは単数1にあなたの独立した正規表現のすべてを結合する必要がありますが、あなたはあなたの代わりにAの文字列のリストを持っている場合、それはそれを行うために簡単だかもしれません正規表現のリスト:

EXCLUSION_DOMAINS = %w[ 
    example.com 
    test.com 
    asdf.com 
] 

EXCLUSION_REGEXP = Regexp.new('(?:' + EXCLUSION_DOMAINS.collect { |d| Regexp.escape(d) }.join('|') + ')$') 

あなたは物事がこれと一致しないことを確実にしたいと思うので、それを使うには少し違う:

validates :email, 
    :format => { 
    :with => VALID_EMAIL_REGEXP, 
    :without => EXCLUSION_REGEXP, 
    :message => "%{value} no good." 
    } 

有効なメールテスターを使用して、そのアドレスが妥当であることを確認する必要があります。これは、VALID_EMAIL_REGEXPとして表現されています。これは、電子メールバリデータの正規表現の一種です。もしそうなら、RFC準拠のものを試してみてください。

+1

ありがとうございます...電子メールが有効であることを確認する方法はありませんか? validates:email、:presence => true、:email => true – AnApprentice

+0

あなたが正しいかもしれません。 – tadman

関連する問題