ruby - 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"
我确信我可以想出更严格的代码,但我关心的是一个同伴,或者我未来的自己,在凌晨进行调试,试图找出问题所在。为了对那个人友善,我宁愿保持简单。
推荐阅读
- scala - 如何在 Scala 的编译时验证类型是否存在
- python - 字符串python中的多个分隔符
- python - SQLAlchemy - 继承将属性条目写入两个表
- arrays - Avro 模式可以指定最小数组长度吗?
- python-3.x - 如何在 python 中创建列表和添加元素?
- .net - F# 和自动向上转换:有时会,有时不会,这背后的基本原理是什么?
- python - 将逻辑应用于 Dataframe 时长度不匹配
- php - .htaccess Mod 重写重定向到 404
- javascript - Fusioncharts graphs are not rendering when the tab is not active - Angular
- javascript - div标签垂直显示而不是水平显示?