根据url提取网站域名的方法小结

简介:

1、原来程序的写法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public  static  string  GetDomainName( string  url)
   {
       Regex reg = new  Regex( @"http(s)?://([\w-]+\.)+[\w-]+/?" );
       string  result = reg.Match(url, 0).Value;
       if  (result.IndexOf( "http://" ) > -1)
       {
           result = result.Replace( "http://" , string .Empty);
       }
       else  if  (result.IndexOf( "https://" ) > -1)
       {
           result = result.Replace( "https://" , string .Empty);
       }
       return  result.Replace( "/" , string .Empty);
   }

2、改进方案

上面的写法,我认为不严谨的地方有两处:a、没有区分部分字符串的大小写(虽然通常传入的url都是小写http(s)开头的,使用起来问题不大);b、参数没有考虑为null的情况。下面给出我的几种解决方法,个人认为相对而言比较简洁严谨一些。

     (1)正则改进

  按照原来代码的写法,正则表达式是先提取出形如 http://www.cnblogs.com/ 的形式的字符串,然后再处理字符串。字符串替换和hard coding看起来会比较多,而且,毫无疑问,上面代码中的正则提取的字符串稍显冗余。我的改进如下:

1
2
3
4
5
6
7
8
9
public  static  string  GetDomainName( string  url)
      {
          if  (url == null )
          {
              throw  new  Exception( "输入的url为空" );
          }
          Regex reg = new  Regex( @"(?<=[://])([\w-]+\.)+[\w-]+/?" , RegexOptions.IgnoreCase);
          return  reg.Match(url, 0).Value.Replace( "/" , string .Empty);
      }

    应该说这是比较忠实于源代码的一种实现。     
    【UPDATE】:根据文章后面布袋和尚说不得大师的指点,再改进一下正则表达式,这样对于正常的url路径或其他类型的路径都可以进行验证匹配了。代码如下:

1
2
3
4
5
6
7
8
9
public  static  string  GetDomainName( string  url)
      {
          if  (url == null )
          {
              throw  new  Exception( "输入的url为空" );
          }
          Regex reg = new  Regex( @"(?<=://)([\w-]+\.)+[\w-]+(?<=/?)" );
          return  reg.Match(url, 0).Value.Replace( "/" , string .Empty);
      }

   (2)直接拼接字符串

  拼接字符串在实际开发中可以做很多事情,简单的域名提取自然不在话下。我们分析一下输入的url,发现很显著也很重要的一个特征就是通过斜线(/)来分割字符串,每一个分隔后的字符串分别表示不同的属性,如对应的协议名称,域名,站点名,页面名称等等。具体分割拼接提取的方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public  static  string  GetDomainName( string  url)
    {
         if  (url == null )
        {
            throw  new  Exception( "输入的url为空" );
        }
        string  result = string .Empty;
        string [] strArr = url.Split( new  char [] { '/'  }, StringSplitOptions.RemoveEmptyEntries);
        foreach  ( string  item in  strArr)
        {
            if  ( string .Compare( "http:" , item.ToLower()) == 0)
            {
                continue ;
            }
            else  if  ( string .Compare( "https:" , item.ToLower()) == 0)
            {
                continue ;
            }
            result = item;
            break ;
        }
        return  result;
    }

           严格来说,这个是比较“笨”的方法,但是通俗易懂。

      (3)通过一个HttpRequest对象获取它的Url的Host

  平时我们都是通过HttpRequest对象获取它的Url的Host来获取网站域名,现在只有一个字符串参数url,很显然,我们会想到构造一个HttpRequest对象,然后按步就班即可。具体方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public  static  string  GetDomainName( string  url)
{
     string  result = null ;
     try
     {
         HttpRequest request = new  HttpRequest( string .Empty, url, string .Empty);
         result = request.Url.Host;
     }
     catch  (Exception ex)
     {
         throw  new  Exception( string .Format( "当前输入的URL:{0},发生异常:{1}" , url, ex.Message));
     }
     return  result;
}

       这个应该算是另辟蹊径的一种解决方案,可是必需要引用System.Web dll,作为基础类库,应该越少引用越好。








本文转自JeffWong博客园博客,原文链接:http://www.cnblogs.com/jeffwongishandsome/archive/2010/10/14/1851217.html,如需转载请自行联系原作者

相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
3月前
WordPress网站更换域名后如何重新激活elementor
本文讲解WordPress网站更换域名后如何重新激活elementor。首先你需要在WordPress后台elementor下点击Disconnect断开原elementor连接,然后登录elementor官网,在后台解除原网站授权;接着在WordPress后台重新连接并激活elementor。
64 2
WordPress网站更换域名后如何重新激活elementor
|
15天前
|
JavaScript
【归总】原生js操作浏览器hash、url参数参数获取/修改方法合集
【归总】原生js操作浏览器hash、url参数参数获取/修改方法合集
|
16天前
|
搜索推荐 网络协议 Apache
如何把一个域名自动重定向到另一个网站
如何把一个域名自动重定向到另一个网站
19 0
|
1月前
|
数据采集 安全 网络协议
收集子域名信息(二):第三方网站查询
收集子域名信息(二):第三方网站查询
19 1
|
2月前
|
移动开发 API
阿里云域名优惠口令及优惠口令获取方法,2024新版口令
2024年阿里云域名优惠口令,com域名续费优惠口令“com批量注册更享优惠”,cn域名续费优惠口令“cn注册多个价格更优”,cn域名注册优惠口令“互联网上的中国标识”,阿里云优惠口令是域名专属的优惠码,可用于域名注册、续费和转入使用,域名优惠口令区分域名后缀,阿里云百科分享2024年阿里云域名优惠口令更新(注册、转入、续费均可使用)
328 0
|
2月前
|
移动开发 API
2024年阿里云域名优惠口令及优惠口令获取方法(新)
com域名续费优惠口令“com批量注册更享优惠”,cn域名续费优惠口令“cn注册多个价格更优”,cn域名注册优惠口令“互联网上的中国标识”,阿里云优惠口令是域名专属的优惠码,可用于域名注册、续费和转入使用,域名优惠口令区分域名后缀,阿里云百科分享2024年阿里云域名优惠口令更新(注册、转入、续费均可使用)
534 1
|
2月前
|
移动开发 API
阿里云域名优惠口令及优惠口令获取方法_2024更新
阿里云域名优惠口令及优惠口令获取方法_2024更新,com域名续费优惠口令“com批量注册更享优惠”,cn域名续费优惠口令“cn注册多个价格更优”,cn域名注册优惠口令“互联网上的中国标识”,阿里云优惠口令是域名专属的优惠码,可用于域名注册、续费和转入使用,域名优惠口令区分域名后缀,阿里云百科分享2024年阿里云域名优惠口令更新(注册、转入、续费均可使用)
482 0
阿里云域名优惠口令及优惠口令获取方法_2024更新
|
2月前
|
域名解析 弹性计算 负载均衡
dns域名问题之网站一直打不开如何解决
DNS服务器是负责将域名转换为IP地址的服务,它是互联网上实现域名解析的关键基础设施;本合集将探讨DNS服务器的工作原理、配置方法和常见问题处理,帮助用户理解和优化DNS服务的使用。
38 8
|
2月前
|
JavaScript 前端开发 网络协议
Python之JavaScript逆向系列——1、URL——域名
Python之JavaScript逆向系列——1、URL——域名
25 0
|
3月前
|
JavaScript
vue项目中统一管理多个后端URL的方法
vue项目中统一管理多个后端URL的方法
43 0