Каков наилучший/простой способ проверки адреса электронной почты в рубине (на стороне сервера)?
Каков наилучший/простой способ проверки адреса электронной почты в Ruby?
Ответ 1
Вы можете посмотреть, соответствует ли оно регулярному выражению, например, используемому в этом валидаторе Rails:
validates_format_of :email,:with => /\A[^@\s][email protected]([^@\s]+\.)+[^@\s]+\z/
Но если вы используете Devise, просто выполните:
validates_format_of :email,:with => Devise::email_regexp
Источник: http://lindsaar.net/2008/4/14/tip-4-detecting-a-valid-email-address
Изменить 1:
полезный сайт для тестов: http://www.rubular.com/
Ответ 2
В Ruby? Так же, как на любом языке.
Отправьте электронное письмо с подтверждением на адрес с ссылкой, которую получатель должен щелкнуть, прежде чем адрес электронной почты будет считаться полностью подтвержденным.
Существует множество причин, по которым полностью отформатированный адрес может быть недействительным (фактический пользователь по этому адресу, заблокированный фильтрами спама и т.д.). Единственный способ узнать наверняка - это успешно завершенная сквозная транзакция некоторого описания.
Ответ 3
Вы можете использовать
<%=email_field_tag 'to[]','' ,:placeholder=>"Type an email address",:pattern=>"^([\w+-.%][email protected][\w-.]+\.[A-Za-z]{2,4},*[\W]*)+$",:multiple => true%>
Ответ 4
Я знаю, что это старый вопрос, но я искал простой способ сделать это. Я наткнулся на gmail, который действительно прост в настройке и использовании.
как валидатор
validates :my_email_attribute, :email => true
Проверка вне модели
EmailValidator.valid?('[email protected]') # boolean
Я надеюсь, что это поможет всем.
Happy Codding
Ответ 5
validates :email, presence: true, format: /\[email protected]\w+\.{1}[a-zA-Z]{2,}/
проверяет, что поле электронной почты не пустое и что один или несколько символов предшествуют "@" и следуют за ним
Добавлена специфика, любые 1 или более символа слова перед символом @
и любым 1 или более символом слова после и между определенно 1 .
и не менее 2 букв после
Ответ 6
Поскольку основной сайт блога ответа был опущен, вот фрагмент кода с этого сайта с помощью nice cacher или gist:
# http://my.rails-royce.org/2010/07/21/email-validation-in-ruby-on-rails-without-regexp/
class EmailValidator < ActiveModel::EachValidator
# Domain must be present and have two or more parts.
def validate_each(record, attribute, value)
address = Mail::Address.new value
record.errors[attribute] << (options[:message] || 'is invalid') unless (address.address == value && address.domain && address.__send__(:tree).domain.dot_atom_text.elements.size > 1 rescue false)
end
end
Ответ 7
Вы можете взять ссылку с https://apidock.com/rails/ActiveModel/Validations/HelperMethods/validates_format_of
validates_format_of :email, with:/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[az]{2,})\z/i
Ответ 8
Отправьте письмо с подтверждением, и я обычно использую этот валидатор... D.R.Y.
# lib/email_validator.rb
class EmailValidator < ActiveModel::EachValidator
EmailAddress = begin
qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]'
dtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]'
atom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-' +
'\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+'
quoted_pair = '\\x5c[\\x00-\\x7f]'
domain_literal = "\\x5b(?:#{dtext}|#{quoted_pair})*\\x5d"
quoted_string = "\\x22(?:#{qtext}|#{quoted_pair})*\\x22"
domain_ref = atom
sub_domain = "(?:#{domain_ref}|#{domain_literal})"
word = "(?:#{atom}|#{quoted_string})"
domain = "#{sub_domain}(?:\\x2e#{sub_domain})*"
local_part = "#{word}(?:\\x2e#{word})*"
addr_spec = "#{local_part}\\x40#{domain}"
pattern = /\A#{addr_spec}\z/
end
def validate_each(record, attribute, value)
unless value =~ EmailAddress
record.errors[attribute] << (options[:message] || "is not valid")
end
end
end
в вашей модели
validates :email , :email => true
или
validates :email, :presence => true,
:length => {:minimum => 3, :maximum => 254},
:uniqueness => true,
:email => true
Ответ 9
Ярлык:
validates :email, :format => /@/
Нормальная форма (регулярное выражение):
validates :email, :format => { :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/ }
Источник: Validator Class
Ответ 10
Если вы используете Rails/Devise - дополнение к ответу @apneadiving -
validates_format_of :email,:with => Devise::email_regexp
Devise :: email_regexp взят из config/initializers/devise.rb
config.email_regexp = /\A[^@\s][email protected]([^@\s]+\.)+[^@\s]+\z/