我希望有一个经过验证的电子邮件域列表,以防止在我的应用上注册。
10minutemail.com,yopmail.com,mail.com,mail.ru等......
我的用户模型中有一个域列表,如下所示:
BAD_DOMAINS = [/10minutemail.com/, /yopmail.com/, /mail/
我想在电子邮件字段中添加用户验证,以便在用户注册其中一个域时添加错误。
BAD_DOMAINS.each { |rule| return true if !domain.match(rule).nil? }
我有正则表达式工作,但如何将其作为验证添加?我试过这个:
validates :email, :format => { : exclusion => BAD_DOMAINS,
:message => "%{value} no good." }
由于
答案 0 :(得分:2)
您需要将所有单独的正则表达式组合成单个正则表达式,但如果您有一个字符串列表而不是正则表达式列表,您可能会发现它更容易实现:
EXCLUSION_DOMAINS = %w[
example.com
test.com
asdf.com
]
EXCLUSION_REGEXP = Regexp.new('(?:' + EXCLUSION_DOMAINS.collect { |d| Regexp.escape(d) }.join('|') + ')$')
你需要确保事情与此不相符,所以使用它会有所不同:
validates :email,
:format => {
:with => VALID_EMAIL_REGEXP,
:without => EXCLUSION_REGEXP,
:message => "%{value} no good."
}
您应该使用某种有效的电子邮件测试程序,以确保地址合理。它在这里表示为VALID_EMAIL_REGEXP
,它是某种电子邮件验证器正则表达式。如果你这样做,请尝试并使用符合RFC的协议。