Я в настоящее время разрабатываю страницу регистрации в моем model/user.rb
файле, как я могу указать, что только эти адреса электронной почты, заканчивающиеся на @gmail.com
, могут быть успешно зарегистрированы? Спасибокак проверить конкретный шаблон электронной почты в ruby on rails
ответ
Использование include
как:
email= "[email protected]"
email.include? "@gmail.com" #returns true
Вы можете следовать этому пути.
В модели
validates :email, format: { with: /^[a-z0-9](\.?[a-z0-9]){5,}@g(oogle)?mail\.com$/i,
message: "Your message" }
Также вы можете изменить регулярное выражение.
Я бы установить 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
Просто отправить их по электронной почте уже
спасибо за 'Devise.email_regexp' – Horacio
как насчет GoogleMail? или пользовательские домены, которые используют gmail? – YOU