Quel est le meilleur moyen / facile de valider une adresse e-mail dans Ruby?

Quel est le meilleur moyen / facile de valider une adresse e-mail dans Ruby (côté serveur)?

Vous pouvez voir si elle correspond à une expression rationnelle telle que 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

Edit 1:

site utile pour les tests: http://www.rubular.com/

En rbuy? 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 (pas d’utilisateur réel à cette adresse, bloqué par les filtres anti-spam, etc.). La seule façon de savoir avec certitude est une transaction de bout en bout avec une description complète.

Vous pouvez utiliser

 <%=email_field_tag 'to[]','' ,:placeholder=>"Type an email address",:pattern=>"^([\w+-.%]+@[\w-.]+\.[A-Za-z]{2,4},*[\W]*)+$",:multiple => true%> 

Je sais que c’est une vieille question mais je cherchais un moyen simple de le faire. Je suis tombé sur un joyau email_validator, il est très simple à configurer et à utiliser.

en tant que validateur

validates :my_email_atsortingbute, :email => true

Validation hors modèle

EmailValidator.valid?('[email protected]') # boolean

J’espère que cela aidera tout le monde.

Heureux Codding

 validates :email, presence: true, format: /\w+@\w+\.{1}[a-zA-Z]{2,}/ 

vérifie que le champ email n’est pas vide et qu’un ou plusieurs caractères précèdent le “@” et le suivent

Spécificité ajoutée, 1 ou plusieurs caractères avant un @ et un ou plusieurs caractères après et entre spécifiquement 1 . et au moins 2 lettres après

Envoyer un mail de confirmation, et j’utiliserai normalement ce validateur … DRY

 # 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 

Comme le blog principal 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 

Formulaire de raccourci:

  validates :email, :format => /@/ 

Forme normale (Regex):

 validates :email, :format => { :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[az]{2,})\Z/ } 

Source: classe de validateur

Vous pouvez prendre référence de https://apidock.com/rails/ActiveModel/Validations/HelperMethods/validates_format_of

validates_format_of :email, with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[az]{2,})\z/i