正在尝试仅提取域名



我试图只获取域名(例如:只获取'google',而不是.com或.uk等(。我遇到了一个简单的解决方案,但它说如果域为零,我就不能使用它(??(这是错误消息: main.rb:7:indomain_name':nil:NilClass(NoMethodError(的未定义方法"split">

这是我的代码:

require 'uri'
def domain_name(url)
URI.parse(url).host.split('.').first
end

请帮我找到这个解决方案。感谢

在调用split之前,只需将主机分配给一个变量即可检查主机是否为nil

def domain_name(url)
host = URI(url).host
split('.').first if host
end

如果你愿意,你也可以使用安全导航操作符&(在Ruby 2.3中引入(

def domain_name(url)
URI.parse(url).host&.split('.')&.first
end

请注意,不使用此运算符是有原因的(代码不可读、难以调试错误等(https://www.theguild.nl/5-reasons-not-to-use-safe-navigation-operators了解更多详细信息。

如果找不到主机,这些解决方案将返回nil。你也可以返回一个空字符串(或其他东西(来做类似的事情:

def domain_name(url)
host = URI(url).host
host ? split('.').first : ''
end

所有这些解决方案只帮助处理nil,但您可能真的想检查一下如何在Ruby中解析url以获得主域?

最后,请注意,即使url不是nil:,host也可以返回nil

URI.parse("hello").host #=> nil

最新更新