Prepending “http://” to a URL that doesn’t already contain “http://”

0
85

A simple solution for what you want is the following:

var prefix = 'http://';
if (s.substr(0, prefix.length) !== prefix)
{
    s = prefix + s;
}

However there are a few things you should be aware of…

The test here is case-sensitive. This means that if the string is initially Http://example.com this will change it to http://Http://example.com which is probably not what you want. You probably should also not modify any string starting with foo:// otherwise you could end up with something like http://https://example.com.

On the other hand if you receive an input such as example.com?redirect=http://othersite.com then you probably do want to prepend http:// so just searching for :// might not be good enough for a general solution.

Alternative approaches

  • Using a regular expression:if (!s.match(/^[a-zA-Z]+:\/\//)) { s = 'http://' + s; }
  • Using a URI parsing library such as JS-URI.if (new URI(s).scheme === null) { s = 'http://' + s; }

LEAVE A REPLY

Please enter your comment!
Please enter your name here