Rails 3 – 帮助使用电子邮件validation正则表达式

提供以下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) 

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

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