4

我目前正在尝试用几件事来验证电子邮件属性:

  1. 它的存在
  2. 它的格式带有正则表达式
  3. 它的独特性
  4. 它不在邮件提供商列表中

我卡在第四步,我真的不知道如何实现它,这一步的主要是排除可抛出的邮件提供程序。

我目前有这个:

  validates :email, :presence   => true,
                    :format     => { :with => email_regex },
                    :uniqueness => { :case_sensitive => false },
                    :exclude => Not working when I put a regex here

我的问题不是正则表达式,而是如何排除与排除正则表达式匹配的电子邮件。

你能帮我做这件事吗?

亲切地,罗布。

4

4 回答 4

8

如果您使用 devise 进行用户身份验证,您可以在 devise.rb 中取消注释代码

  # Email regex used to validate email formats. It simply asserts that
  # one (and only one) @ exists in the given string. This is mainly
  # to give user feedback and not to assert the e-mail validity.
  # config.email_regexp = /\A[^@]+@[^@]+\z/

否则我认为你可以这样写

在模型中

  validates :email, uniqueness: true
  validate  :email_regex

 def email_regex
    if email.present? and not email.match(/\A[^@]+@[^@]+\z/)
      errors.add :email, "This is not a valid email format"
    end
  end
于 2013-08-22T08:48:05.070 回答
5

格式验证器有一个无选项(至少在 rails 4 和 3.2 中),所以...

validates :email, :presence   => true,
                  :format     => { :with => email_regex},
                  :uniqueness => { :case_sensitive => false }
validates :email, :format     => {:without => some_regex}
于 2013-08-22T15:08:12.100 回答
0

Rails 提供排除助手,而不是排除;无论如何,它验证属性的值不包含在给定的集合中。(http://guides.rubyonrails.org/active_record_validations.html#exclusion

我认为您应该使用自定义验证方法来解决您的问题(http://guides.rubyonrails.org/active_record_validations.html#custom-methods)。

于 2013-08-22T08:48:07.053 回答
0

在你的模型中做这样的事情。

validate :exclude_emails

private

def exclude_emails
if ( self.email =~ /blah(.*)/ )
  errors.add_to_base("Email not valid")
end
end
于 2013-08-22T08:48:50.170 回答