URIのパターンマッチとURIクラス
URIのパターンマッチに定番のやり方はないの?って疑問を見つけて、
定番かどうかわからないけど、そーいえばRubyのライブラリに便利よさげなのが
あったような……って探したら、ありました。
さらにるびまにも解説がありました。
URI.parseメソッドで文字列を解析して、パターンにマッチしてなければ
URI::InvalidURIErrorが投げてくるのでrescueするとして
あとはschemeを指定するとか?
#もっとスマートなやり方ありそう。
require 'uri' def http?(str) begin uri = URI.parse(str) rescue URI::InvalidURIError return false end return uri.scheme == 'http' end uri_list = [ 'http://d.hatena.ne.jp/Kanta', 'https://d.hatena.ne.jp/Kanta', 'http://d.hatena+ne.jp/Kanta', 'file://d.hatena.ne.jp/kanta'] uri_list.each do |uri| print uri, " => ", http?(uri), "\n" end
結果
http://d.hatena.ne.jp/Kanta => true https://d.hatena.ne.jp/Kanta => false http://d.hatena+ne.jp/Kanta => false file://d.hatena.ne.jp/kanta => false
2006.11.15 追記
secondlifeさんにかっちょよい書き方を教えていただきました。
def valid_http_uri?(str) URI.split(str).first == 'http' rescue false end
おお、Rubyっぽい。