Подтвердить что ты не робот

Каков наилучший/простой способ проверки адреса электронной почты в Ruby?

Каков наилучший/простой способ проверки адреса электронной почты в рубине (на стороне сервера)?

4b9b3361

Ответ 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

Ответ 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/