Rails 3 - 帮助使用电子邮件验证正则表达式

时间:2011-01-21 23:19:32

标签: ruby-on-rails ruby regex ruby-on-rails-3

以下REGEX如果提供的电子邮件域与INVALID_EMAILs不匹配似乎无限期运行并锁定rails服务器(我的本地环境)。

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)

1 个答案:

答案 0 :(得分:2)

你这样做太复杂了。这应该足够了:

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