2012-02-24 9 views
0

を働いていない「のhttpが含まれない限り、」私は、HTTP追加するには、次の方法があります:それがある場合にのみ機能RubyのURLの正規表現、

def smart_url(url) 
    unless url[/^http?s:\/\//] 
    url = 'http://' + url 
    end 
end 

:そのないすでに存在する場合は、URLの先頭に//をhttpは含まれていませんが、すでにhttp://が含まれている場合は追加されていますが、そのうち2つで終わります。https://が既に含まれている場合、URLはまったく返されません。

私は正規表現で間違いを犯しましたか?

+0

回答に加えて、これはhttpsとhttsに一致します。オプションの文字の後にクエスチョンマークを付ける必要があります。 – markijbema

答えて

1

非正規表現ソリューション:

def smart_url(url) 
    url.start_with?('http://', 'https://') ? url : 'http://'+url 
end 

? :構築物はif .. then..else..endを書くの短い方法です。

+0

ちょうどその時のように切り替える必要があります:? url: 'http://' + url。ありがとうalot :) – Darcbar

+0

ああ..それはうんざりだった。編集された – steenslag

3

あなたはに正規表現を変更する必要があります。

^https?:\/\/ 

テストhere

+0

上記の正規表現を使用している場合、すでにhttpまたはhttpsが含まれている場合、このメソッドは何も返しません。 – Darcbar

+0

Rubyの通常の動作です。 Rubyのメソッドは、最新の評価式を返します。最後の行に 'url'を追加するだけです。 – lucapette

+0

私は非正規表現のアプローチに行くことにしましたが、あなたの答えも正しかったです、ありがとう – Darcbar