【发布时间】:2013-04-20 15:59:06
【问题描述】:
如何从 url 中删除随机多余的斜杠或仅对其进行验证?
例如,
有效陈述:
www.domain.com/url/url2
无效陈述:
https://domain.com/////url/url2
www.domain.com/url////////url2
感谢您的帮助!
【问题讨论】:
标签: ruby-on-rails ruby regex gsub slash
如何从 url 中删除随机多余的斜杠或仅对其进行验证?
例如,
有效陈述:
www.domain.com/url/url2
无效陈述:
https://domain.com/////url/url2
www.domain.com/url////////url2
感谢您的帮助!
【问题讨论】:
标签: ruby-on-rails ruby regex gsub slash
其他答案不会从 URL 中删除 尾部斜杠 - 这对于 SEO 目的可能很重要。有很多方法可以做到这一点,例如:
require 'uri'
url = URI.parse('https://example.com/////url/url2/')
url.path.gsub! %r{/+}, '/'
url.path.sub! %r{/$}, ''
或者:
require 'uri'
url = URI.parse('https://example.com/////url/url2/')
url.path.squeeze!('/')
url.path.chomp!('/')
请参阅:String#squeeze! 和 String#chomp!。
【讨论】:
这种模式可以完成工作(无论是否使用 http(s)):
"https://domain.com/////url/url2".gsub! %r{(?<!:)/+(?=/)}, ''
【讨论】:
使用正则表达式:
require 'uri'
url = URI.parse('https://domain.com/////url/url2')
url.path.gsub! %r{/+}, '/'
p url.to_s
【讨论】:
https://)之后折叠基本的双斜杠,不是吗?更好地使用%r{([^:/])/+}, '$1/'。
url.path.squeeze!("/")