2016-11-05 81 views
0

我目前正在设计一个注册页面,在我的model/user.rb文件中,我如何指定只有以@gmail.com结尾的这些电子邮件地址才能成功注册? 谢谢如何在rails上验证特定的电子邮件模式

+0

如何电子邮件约Googlemail电子邮件?或使用Gmail的自定义域? – YOU

回答

-1

使用include像:

email= "[email protected]" 

email.include? "@gmail.com" #returns true 
0

您可以按照这种方式。

在模型中

validates :email, format: { with: /^[a-z0-9](\.?[a-z0-9]){5,}@g(oogle)?mail\.com$/i, 
message: "Your message" } 

你也可以改变正则表达式。

1

我会成立2个验证:

  • 第一个确认的电子邮件地址是有效的,用你喜欢的电子邮件正则表达式(我提供一个例子,source):

    EMAIL_REGEX = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i 
    validates_format_of :email, with: EMAIL_REGEX 
    
  • ,用于验证的电子邮件地址的域的第二个:

    GMAIL_DOMAINS = %w{gmail.com googlemail.com} 
    
    validates :email_is_gmail 
    
    private 
    def email_is_gmail 
        GMAIL_DOMAINS.each do |domain| 
        return true if email.end_with?('@' + domain) 
        end 
    end 
    

警告:

  • 关于第一个验证,我劝你最好确保你的代码的不同部分不使用不同的正则表达式验证电子邮件地址。例如,如果您正在使用Devise,则应使用Devise.email_regexp而不是EMAIL_REGEX。 (其实,如果你使用Devise或类似的,你甚至不需要自己验证电子邮件地址)。

    在代码的不同部分使用不同的正则表达式可能会导致创建具有在某些地方验证的电子邮件地址的帐户,但在其他地方验证失败。这可能会让最终用户恼火。 (举个例子,看到sub-addressing最后一段Wikipedia上关于电子邮件地址页面上,并想象一个网站,有时允许+,有时没有。)

  • 作为@YOU在评论中提到,通过域名过滤可能不完全是你想要的。很多Google帐户不会以@gmail.com(例如,googlemail.com或任何使用GSuite的企业都有自己的域名)结束。如果您想只允许拥有Google帐户的用户,我建议您查看Google Sign-In身份验证系统。
  • 有人主张反对用正则表达式验证电子邮件地址:Stop Validating Email Addresses With Regex

    只需发送他们已经

+0

感谢'Devise.email_regexp' – Horacio