From what I get, you don't want to use location
as the URL to subtract the port from, just any string as an URL. Well, I came up with this, for such a case. This function takes any string (but you can pass it the location
URL anyway, and it works the same):
function getPort(url) {
url = url.match(/^(([a-z]+:)?(\/\/)?[^\/]+).*$/)[1] || url;
var parts = url.split(':'),
port = parseInt(parts[parts.length - 1], 10);
if(parts[0] === 'http' && (isNaN(port) || parts.length < 3)) {
return 80;
}
if(parts[0] === 'https' && (isNaN(port) || parts.length < 3)) {
return 443;
}
if(parts.length === 1 || isNaN(port)) return 80;
return port;
}
- It gets the base url from the string.
- It splits the base url into parts, by
':'
.
- It tries to parse the digits-only part of the port (the last element of the
parts
array) into an integer.
- If the URL starts with
'http'
AND the port is not a number or the length of the URL parts array is less than 3 (which means no port was implied in the URL string), it returns the default HTTP port.
- Same thing goes for
'https'
.
- If the length was
1
, it means no protocol nor port was provided. In that case or in the case the port is not a number (and again, no protocol was provided), return the default HTTP
port.
- If it passes through all these tests, then it just returns the port it tried to parse into an integer at the beginning of the function.
port
andprotocal
from URL such aswindow.document.location.port
andwindow.document.location.protocol
or simplylocation.port
andlocation.protocal