Ruby:通过解析规范化URL
Ruby: Normalize URL by parsing
我的目标是转换其中任何一个:
- 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"
我确定我可以想出更紧凑的代码,但我担心的是同行,或者我未来的自己,在凌晨调试,试图找出问题所在。为了对那个人友善,我宁愿保持简单。
我的目标是转换其中任何一个:
- 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"
我确定我可以想出更紧凑的代码,但我担心的是同行,或者我未来的自己,在凌晨调试,试图找出问题所在。为了对那个人友善,我宁愿保持简单。