ruby-on-railsrubyregexvalidationurl

Add http(s) to URL if it's not there?


I'm using this regex in my model to validate an URL submitted by the user. I don't want to force the user to type the http part, but would like to add it myself if it's not there.

validates :url, :format => { :with => /^((http|https):\/\/)?[a-z0-9]+([-.]{1}[a-z0-9]+).[a-z]{2,5}(:[0-9]{1,5})?(\/.)?$/ix, :message => " is not valid" }

Any idea how I could do that? I have very little experience with validation and regex..


Solution

  • Use a before filter to add it if it is not there:

    before_validation :smart_add_url_protocol
    
    protected
    
    def smart_add_url_protocol
      unless url[/\Ahttp:\/\//] || url[/\Ahttps:\/\//]
        self.url = "http://#{url}"
      end
    end
    

    Leave the validation you have in, that way if they make a typo they can correct the protocol.