繁体   English   中英

Ruby:通过解析规范化URL

[英]Ruby: Normalize URL by parsing

我的目标是转换以下任何一个:

至:

  • www.google.com

我做了以下事情:

def parse_url(url)

    uri = URI.parse(url)

    return uri.host if uri.scheme
    return uri.to_s if uri.to_s[0, 4] == 'www.'

    "www.#{url}"
end

但是我觉得可能还有一些我可以使用的标准,因为它看起来不那么优雅。

始终确保代码首先执行您想要的操作。 如果稍后有代码气味,请考虑使用各种方法来执行所需的操作,然后选择最容易理解的方法。

简洁的代码不一定是最优雅的代码,通常很难理解,这可能导致后来的错误在其他人不得不找出错误所在并且不理解导致无法理解的逻辑的辉煌时引入。

您的代码无法满足您的要求:

parse_url('http://google.com') # => "google.com"

这是我写的快速而肮脏的第一遍:

require 'uri'

def parse_url(url)

    uri = URI.parse(url)

    # if it's not a generic URI...
    if uri.scheme

      # peek at the host
      url_host = uri.host

      # if it starts with "www." then return it as is...
      if url_host[0,4] == 'www.'
        return url_host

      # else add the prefix and return it
      else
        return 'www.' + uri.host
      end

    # if it's a generic...
    else
      if url[0,4] == 'www.'
        return url
      else
        return 'www.' + url
      end
    end

end

parse_url('http://www.google.com') # => "www.google.com"
parse_url('www.google.com') # => "www.google.com"
parse_url('http://google.com') # => "www.google.com"
parse_url('google.com') # => "www.google.com"

我确定我可以提出更严格的代码,但我的关注点是同伴,或者我自己的未来,在清晨调试,试图找出问题所在。 为了对那个人友好,我宁愿保持简单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM