2016-11-05 2 views
0

Я в настоящее время разрабатываю страницу регистрации в моем model/user.rb файле, как я могу указать, что только эти адреса электронной почты, заканчивающиеся на @gmail.com, могут быть успешно зарегистрированы? Спасибокак проверить конкретный шаблон электронной почты в ruby ​​on rails

+0

как насчет GoogleMail? или пользовательские домены, которые используют gmail? – YOU

ответ

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 на странице Википедии о адресе электронной почты, и представьте себе сайт, который иногда позволяет в +, а иногда и нет.)

  • Как @YOU упоминались в комментариях, фильтрация по имени домена может не совсем то, что вы хотите. Многие учетные записи Google не заканчиваются на @gmail.com (например, googlemail.com или даже любой бизнес, используя GSuite со своим собственным доменным именем). Если вы хотите разрешить только людям, владеющим учетной записью Google, я бы посоветовал вам взглянуть на систему аутентификации Google Sign-In.
  • Некоторые люди выступают против проверки адреса электронной почты с регулярным выражением: Stop Validating Email Addresses With Regex

    Просто отправить их по электронной почте уже

+0

спасибо за 'Devise.email_regexp' – Horacio