2011-01-21 20 views
0

次のREGEXが指定されている場合、INVALID_EMAILと一致しない電子メールドメインが無期限に実行され、レールサーバー(ローカルenv)をロックするようです。Rails 3 - 電子メール検証のヘルプRegex

INVALID_EMAILS = %w(gmail.com googlemail.com yahoo.com ymail.com rocketmail.com hotmail.com facebook.com) 


    def valid_email_domain(emailAddy) 
    reg = Regexp.new /#{User::INVALID_EMAILS.map{|a| Regexp.quote(a)}.join("|")}/ 
    if emailAddy.scan(reg).size == 0 
     return true 
    else 
     return false 
    end 
    end 

フィードバックを提供できる正規表現の専門家はいませんか?おかげ

更新日:

コントローラ:

def create 

    @user = User.new 

    # User EmailVeracity to validate the email address 
    email = EmailVeracity::Address.new(params[:user][:email]) 

    Rails.logger.info 'Email Check Result' 
Rails.logger.info valid_email_domain(params[:user][:email]) 
    Rails.logger.info 'Email Check Result' 

    if email.valid? 
     Rails.logger.info 'Sign this email up' 
    else 
     Rails.logger.info 'Bad email, dont touch that' 
    end 

    respond_to do |format| 
     format.html 
     format.js 
    end 

    end 
protected 

    def valid_email_domain(emailAddy) 
    !(emailAddy =~ /#{User::INVALID_EMAILS.map{|a| Regexp.quote(a)}.join("|")}/) 
    end 

ユーザーモデル:あなたはこの方法が複雑すぎる作っている

INVALID_EMAILS = %w(gmail.com googlemail.com yahoo.com ymail.com rocketmail.com hotmail.com facebook.com) 

答えて

2

。これで十分であるはずです:

def valid_email_domain(email_address) 
    !(email_address =~ /#{INVALID_EMAILS.map{|a| Regexp.quote(a)}.join("|")}/) 
end 
+0

ありがとうございますが、正規表現に問題があります。無効なメールと一致するメールがあると、うまく動作し、falseを返します。 invalid_emailsと一致しないメールが届いたとき、応答がなくなり、応答が遅くなります。 – AnApprentice

+1

@AnApprentice:これは私が見ることができるコードでは起こっていません。より多くのコードを提供してください。 –

+0

この場合の正規表現はそれをしません。有効なメールと無効なメールの両方で、完全に動作します。コードのどこかに問題がある可能性があります。おそらくこのメソッドを呼び出す部分です。 – vonconrad

関連する問題