2016-11-05 52 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