我想在javascript中使用一个函数作为参数获取url并返回该URL的端口,如下所示:
http
或https
(端口80/443),它将无法显示在网址结构中,但我希望它们仍然可以返回示例:
function myFunction(url){
something here
...
return port
}
我已经看到使用一些额外的库可以轻松完成这项工作,但我不想使用它。从那时起我就没有和js一起工作过,如果有人也能解释他的解决方案,我真的很感激。
答案 0 :(得分:5)
根据我的要求,您不希望使用location
作为从中减去端口的URL,只需将任何字符串作为URL。好吧,我想出了这个案例。此函数接受任何字符串(但您可以将location
URL传递给它,并且它的工作方式相同):
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;
}
':'
。parts
数组的最后一个元素)解析为整数。'http'
AND 开头,则端口不是数字,或者网址部分数组的长度小于3(这意味着网址字符串中没有隐含端口),它返回默认的HTTP端口。'https'
。1
,则表示未提供协议或端口。在这种情况下,或者在端口不是数字的情况下(同样,没有提供协议),返回默认的HTTP
端口。答案 1 :(得分:1)
这是一个基于正则表达式的解决方案(正则表达式不是防弹):
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]];
}
}
&#13;
<!-- nothing here, see console -->
&#13;
答案 2 :(得分:-1)
希望以下代码能够提供帮助
function getPort(){
var port==location.port;
if(port=="")
{
if(location.protocol=="http:")
return "80";
else
return "443";
return port;
}