Prepending "http://" to a URL that doesn't already contain "http://"
If you also want to allow "https://", I would use a regular expression like this:
if (!/^https?:\/\//i.test(url)) {
url = 'http://' + url;
}
If you're not familiar with regular expressions, here's what each part means.
^
- Only match at the beginning of the stringhttp
- Match the literal string "http"s?
- Optionally match an "s":
- Match a colon\/\/
- Escape the "/" characters since they mark the beginning/end of the regular expression- The "i" after the regular expression makes it case-insensitive so it will match "HTTP://", etc.
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; }
Related questions
- Javascript equalsIgnoreCase: case insensitive string comparation
- javascript startswith
- How do I parse a URL into hostname and path in javascript?
Lifted from the Linkenizer (Null won't mind)
link = (link.indexOf('://') === -1) ? 'http://' + link : link;
This will prepend 'http://'
to link
if it can't find the ://
indicating protocol. This won't work well if ://
occurs elsewhere in the string, but it's good enough.
Examples:
http://www.google.com -> http://www.google.com
ftp://google.com -> ftp://google.com
www.google.com -> http://www.google.com
google.com -> http://google.com
Since you said you are saving this URL, it would be a better idea to do this on the server-side, so clients who have js disabled won't mess up the links.