问题
I would like a function in javascript that will get as a parameter an url and will return the port of that URL as it follows:
- If there's a
httporhttps(port 80 / 443) it won't be shown in url structure but I want them returned anyway. - If there's another port, I want that to be returned.
Example:
function myFunction(url){
something here
...
return port
}
I've seen that this can be done easy using some additional libraries but I do not want to use one. I didn't work with js since now and I would really appreciate if somebody will also be able to explain his solution.
回答1:
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
partsarray) 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 defaultHTTPport. - 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.
回答2:
Here is a regex based solution (the regex is not bullet proof):
var urls = [
"http://localhost/path/",
"https://localhost/",
"http://localhost:8080",
"https://localhost:8443/path",
"ftp://localhost/"
];
var i;
for (i = 0; i < urls.length; i++) {
console.log(urls[i], getPortFromURL(urls[i]));
}
function getPortFromURL(url) {
var regex = /^(http|https):\/\/[^:\/]+(?::(\d+))?/;
var match = url.match(regex);
if (match === null) {
return null;
} else {
return match[2] ? match[2] : {http: "80", https: "443"}[match[1]];
}
}
<!-- nothing here, see console -->
回答3:
hope the following code will help
function getPort(){
var port==location.port;
if(port=="")
{
if(location.protocol=="http:")
return "80";
else
return "443";
return port;
}
来源:https://stackoverflow.com/questions/29839793/getting-port-from-url-string-using-javascript