我目前正在尝试使用少量内容验证电子邮件属性:
我坚持第四步,我真的不知道如何实现它,这个步骤的主要部分是排除可丢弃邮件提供商。
我目前这个:
validates :email, :presence => true,
:format => { :with => email_regex },
:uniqueness => { :case_sensitive => false },
:exclude => Not working when I put a regex here
我的问题不在于正则表达式,而是如何排除使用排除正则表达式的电子邮件匹配。
你能帮我这么做吗?
亲切地,Rob。
答案 0 :(得分: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
答案 1 :(得分:5)
格式验证器有一个无选项(至少在rails 4和3.2中),所以......
validates :email, :presence => true,
:format => { :with => email_regex},
:uniqueness => { :case_sensitive => false }
validates :email, :format => {:without => some_regex}
答案 2 :(得分:0)
Rails提供排除帮助程序,而非排除;无论如何,它验证属性的值不包含在给定集合中。 (http://guides.rubyonrails.org/active_record_validations.html#exclusion)
我认为您应该使用自定义验证方法来解决您的问题(http://guides.rubyonrails.org/active_record_validations.html#custom-methods)。
答案 3 :(得分:0)
在你的模特中做这样的事情。
validate :exclude_emails
private
def exclude_emails
if ( self.email =~ /blah(.*)/ )
errors.add_to_base("Email not valid")
end
end