Ruby:通过解析规范化 URL



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

  • https://www.google.com
  • www.google.com
  • google.com

自:

  • 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"

我相信我可以想出更严格的代码,但我关心的是同行,或者我未来的自己,在凌晨调试,试图找出问题所在。为了善待那个人,我宁愿保持简单。

最新更新