2017-07-20 3 views
0

Je veux que les adresses e-mail officiels tels que [email protected] pour vous inscrire sur mon service plutôt que d'autres adresses e-mail génériques tels que gmail.com ou Yahoo mail.comvalidation officiel email Ruby

Y at-il un ruby gem pour réaliser ce genre de validation d'email? Si non, comment y arriver?

+0

Il suffit d'ajouter un regard négatif avant de l'après '@' 'et le point .' symboles. Comme (à partir de la spécification html5) '(? I) [a-z0-9.! # $% & '* +/=?^_ \' {|} ~ -] + @ (?! gmail | yahoo) [un -z0-9] (?: [a-z0-9 -] {0,61} [a-z0-9])? (?: \. (?! gmail | yahoo) [a-z0-9] (?: [a-z0-9 -] {0,61} [a-z0-9])?) * ' – sln

Répondre

2

Vous pouvez écrire une validation personnalisée dans le modèle approprié comme indiqué ici: http://www.rails-dev.com/custom-validators-in-ruby-on-rails-4

L'idée de base dans l'article est la suivante:

Faites votre méthode de validation, et le mettre dans un nouveau répertoire appelé « validateurs »

# app/validators/email_validator.rb 
class EmailValidator < ActiveModel::EachValidator 
    def validate_each(record, attribute, value) 
    unless value =~ /\A([^@\s]+)[email protected]\z/i 
     record.errors[attribute] << (options[:message] || "wrong email address") 
    end 
    end 
end 

(je ne l'ai pas testé cette regex! S'il vous plaît utiliser quelque chose comme http://rubular.com/ et branchez votre propre modèle de domaine e-mail pour vous assurer qu'il fonctionne correctement.)

Ensuite, assurez-vous que Rails sait pour charger le nouveau répertoire validateurs:

# config/application.rb 
config.autoload_paths += %W["#{config.root}/app/validators/"] 

Ensuite, ajoutez la nouvelle validation (e-mail) au modèle approprié:

#MyModel.rb  
validates :my_email_field, email: true 
0

Il y a un service Web MailboxValidator gratuit que vous pouvez effectuer une validation d'adresse e-mail en temps réel dans Ruby.

https://github.com/MailboxValidator/mailboxvalidator-ruby

require "mailboxvalidator_ruby" 

apikey = "MY_API_KEY" 
email = "[email protected]" 

mbv = MailboxValidator::MBV.new() 
mbv.apikey = apikey 
mbv.query_single(email) 

if mbv.error != nil 
    puts "Error: #{mbv.error}" 
elsif mbv.result != nil 
    puts "email_address: #{mbv.result.email_address}" 
    puts "domain: #{mbv.result.domain}" 
    puts "is_free: #{mbv.result.is_free}" 
    puts "is_syntax: #{mbv.result.is_syntax}" 
    puts "is_domain: #{mbv.result.is_domain}" 
    puts "is_smtp: #{mbv.result.is_smtp}" 
    puts "is_verified: #{mbv.result.is_verified}" 
    puts "is_server_down: #{mbv.result.is_server_down}" 
    puts "is_greylisted: #{mbv.result.is_greylisted}" 
    puts "is_disposable: #{mbv.result.is_disposable}" 
    puts "is_suppressed: #{mbv.result.is_suppressed}" 
    puts "is_role: #{mbv.result.is_role}" 
    puts "is_high_risk: #{mbv.result.is_high_risk}" 
    puts "is_catchall: #{mbv.result.is_catchall}" 
    puts "mailboxvalidator_score: #{mbv.result.mailboxvalidator_score}" 
    puts "time_taken: #{mbv.result.time_taken}" 
    puts "status: #{mbv.result.status}" 
    puts "credits_available: #{mbv.result.credits_available}" 
    puts "error_code: #{mbv.result.error_code}" 
    puts "error_message: #{mbv.result.error_message}" 
end