2014-01-27 6 views
1

У меня есть окно ввода URL-адреса, но я думаю, что я его изменю, потому что пользователи по-прежнему не всегда правильно вводят URL-адрес, как показано в примере, и URL-адрес все еще позволяет несколько вариантов. Мне было интересно, как я могу превратить введенный пользователем URL в формат, который я хочу. Скажем, я хочу следующий формат в конце:Правильный введенный пользователем URL-адрес: Ruby

http://www.example.com/ 

но пользователь входит в один из следующих

www.example.com 
www.example.com/ 
http://www.example.com 

Другой путь был бы, если бы не использовать субдомен поэтому конечный результат должно быть:

http://example.com 

и они печатают либо в:

example.com 
example.com/ 
http://example.com 

Код, который мне нужен, должен иметь возможность корректно обрабатывать любые ошибки форматирования, чтобы получить его в желаемом формате.

ответ

0
def correct(url, protocol='http') 
    url = url.sub(%r{^https?://}, '') 
    protocol = $& || "#{protocol}://" 
    #url = url.chomp('/') + '/' # Uncomment to ensure the url to ends with `/` 
    url = 'www.' + url unless url.start_with? 'www.' 
    protocol + url 
end 

correct('www.example.com')  # "http://www.example.com" 
correct('www.example.com/')  # "http://www.example.com/" 
correct('http://www.example.com') # "http://www.example.com" 
correct('example.com')   # "http://www.example.com" 
correct(' example.com/')   # "http://www. example.com/" 
correct('http://example.com')  # "http://www.example.com" 
correct('https://example.com') # "https://www.example.com" 
+0

это ломает HTTPS-адреса – levinalex

+0

@levinalex, Вы правы. Я обновил код, чтобы соблюдать протокол (по умолчанию 'http'). Спасибо за комментарий. – falsetru

0

У меня такая же проблема, и мое решение в Rails
в application_helper.rb:

def address(link) 
    return link if link.scan(/(https:\/\/)|(http:\/\/)/).any? 
    link.split('').unshift('http://').join('') 
end 

в views:

= link_to "", address(user.website) 

в pry:

=> helper.address("http://www.example.com/") 
=> "http://www.example.com/" 
=> helper.address("example.com") 
=> "http://example.com" 
0

вы должны использовать domainatrix перл:

require 'domainatrix' 

str = 'example.com' 
url = Domainatrix.parse(str).url #=> "http://example.com" 
Смежные вопросы