使用Javascript从URL字符串获取端口

时间:2015-04-24 05:58:08

标签: javascript regex

我想在javascript中使用一个函数作为参数获取url并返回该URL的端口,如下所示:

  • 如果有httphttps (端口80/443),它将无法显示在网址结构中,但我希望它们仍然可以返回
  • 如果有另一个端口,我希望将其返回。

示例:

function myFunction(url){
    something here
    ...
    return port
}

我已经看到使用一些额外的库可以轻松完成这项工作,但我不想使用它。从那时起我就没有和js一起工作过,如果有人也能解释他的解决方案,我真的很感激。

3 个答案:

答案 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)

这是一个基于正则表达式的解决方案(正则表达式不是防弹):

&#13;
&#13;
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;
&#13;
&#13;

答案 2 :(得分:-1)

希望以下代码能够提供帮助

function getPort(){
var port==location.port;
if(port=="")
{
if(location.protocol=="http:")
  return "80";
else
  return "443";
return port;
}