Quelle est la meilleure façon/facile de valider une adresse e-mail dans Ruby (côté serveur)?
Vous pouvez voir s'il correspond à une expression rationnelle comme celle utilisée dans ce validateur Rails:
validates_format_of :email,:with => /\A[^@\s]+@([^@\s]+\.)+[^@\s]+\z/
Mais si vous utilisez Devise, faites simplement:
validates_format_of :email,:with => Devise::email_regexp
Source: http://lindsaar.net/2008/4/14/tip-4-detecting-a-valid-email-address
Modifier 1:
site Web utile pour les tests: http://www.rubular.com/
En Ruby? De la même manière que dans n'importe quelle langue.
Envoyez un e-mail de confirmation à l'adresse avec un lien sur lequel le destinataire doit cliquer avant que l'adresse e-mail ne soit considérée comme entièrement validée.
Il existe un certain nombre de raisons pour lesquelles une adresse parfaitement formatée peut toujours être invalide (aucun utilisateur réel à cette adresse, bloqué par des filtres anti-spam, etc.). La seule façon de savoir avec certitude est une transaction de bout en bout terminée avec succès d'une certaine description.
validates :email, presence: true, format: /\w+@\w+\.{1}[a-zA-Z]{2,}/
vérifie que le champ e-mail n'est pas vide et qu'un ou plusieurs caractères précèdent et suivent le '@'
Spécificité ajoutée, 1 ou plusieurs caractères Word avant un @
et tout ou plusieurs caractères Word après et entre spécifiquement 1 .
et au moins 2 lettres après
Je sais que c'est une vieille question mais je cherchais un moyen simple de le faire. Je suis tombé sur un email_validator gem c'est vraiment simple à configurer et à utiliser.
comme validateur
validates :my_email_attribute, :email => true
Validation en dehors d'un modèle
EmailValidator.valid?('[email protected]') # boolean
J'espère que cela aide tout le monde.
Codding heureux
Vous pouvez utiliser
<%=email_field_tag 'to[]','' ,:placeholder=>"Type an email address",:pattern=>"^([\w+-.%]+@[\w-.]+\.[A-Za-z]{2,4},*[\W]*)+$",:multiple => true%>
Vous pouvez prendre la référence de https://apidock.com/Rails/ActiveModel/Validations/HelperMethods/validates_format_of
validates_format_of :email, with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
Puisque le site du blog de la réponse principale était en panne, voici l'extrait de code de ce site via Nice cacher ou 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
Forme de raccourci:
validates :email, :format => /@/
Forme normale (expression régulière):
validates :email, :format => { :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/ }
Source: classe de validateur
Envoyez un mail de confirmation et j'utiliserai généralement ce validateur ... 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
dans votre modèle
validates :email , :email => true
ou
validates :email, :presence => true,
:length => {:minimum => 3, :maximum => 254},
:uniqueness => true,
:email => true
Si vous utilisez Rails/Devise - ajout à la réponse de @ apneadiving -
validates_format_of :email,:with => Devise::email_regexp
Devise :: email_regexp est tiré de config/initializers/devise.rb
config.email_regexp = /\A[^@\s]+@([^@\s]+\.)+[^@\s]+\z/