What is the best/easy way to validate an email address in Ruby?

前端 未结 10 891
刺人心
刺人心 2020-12-13 06:40

What is the best/easy way to validate an email address in ruby (on the server side)?

10条回答
  •  情歌与酒
    2020-12-13 07:06

    Send a confirmation mail , and I will usualy use this validator ... 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
    

    in your model

    validates :email , :email => true
    

    or

     validates :email, :presence => true, 
                    :length => {:minimum => 3, :maximum => 254},
                    :uniqueness => true,
                    :email => true
    

提交回复
热议问题