gpt4 book ai didi

ruby-on-rails - 获取任何类型的 URL 格式的域名? -- PHP 到 Ruby

转载 作者:数据小太阳 更新时间:2023-10-29 08:24:43 25 4
gpt4 key购买 nike

我有一个 PHP 函数,可以为任何给定的 url 变体正确提取域名(没有任何子域)。我是 Ruby 的新手,很难让它工作:

function get_domain_name( $url )
{
eregi( "http[s]*://([a-zA-Z0-9.-]*)/?.*", $url, $domain );
$domain = explode( ".", $domain[1] );

if ( strlen( end($domain) ) == 2 && ( strlen($domain[count($domain)-2]) == 3 || strlen($domain[count($domain)-2]) == 2 ) )
{
# special case domains -- ex: co.uk .in .ca
return strtolower( $domain[count($domain)-3] . "." . $domain[count($domain)-2] . "." . end( $domain ) );
}
else
{
# regular .com type domains -- three or more letters
return strtolower( $domain[count($domain)-2] . "." . end( $domain ) );
}
}

Rails 中是否已经有一些东西可以做同样的事情?

更新:

感谢@BenW,这是我最终得到的结果

 def extract_domain(url)
if domain = url.match(/^(http:\/\/)*(www.)*([a-zA-Z0-9.-]*)\/?.*/i)
domain = domain[3].split('.')
if (domain.last.length == 2) && (domain[-2].length == 3 || domain[-2].length == 2)
# special case domains -- ex: co.uk .in .ca
domain[-3..-1].join('.')
else
# regular .com type domains -- three or more letters
domain[-2..-1].join('.')
end
end
end

它接受所有这些格式:

http://www2.google.com
www2.google.com
http://www.google.com
http://www.google.co.uk
www.google.com
google.co.uk
http://some.long.ass.subdomain.google.com

最佳答案

使用 Addressable并利用 ruby 的 String#slice :

def domain_name(uri)
Addressable::URI.heuristic_parse(uri, :scheme => "http") \
.host[/\w+\.\w+(\.\w{2})?\Z/]
end

domain_name("stackoverflow.com") # => stackoverflow.com
domain_name("www.stackoverflow.com") # => stackoverflow.com
domain_name("http://stackoverflow.com") # => stackoverflow.com
domain_name("thing.com.au") # => thing.com.au
domain_name("some.thing.com.au") # => thing.com.au
domain_name("police.gov.uk") # => police.gov.uk

关于ruby-on-rails - 获取任何类型的 URL 格式的域名? -- PHP 到 Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8150119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com