Rubyで文字列がURL形式であるかチェックする場合は
URI::DEFAULT_PARSER.make_regexp.match
を使用します。
これを使用することで、引数に渡された文字列がURI形式であるかどうかをチェックすることができます。
引数の文字列がURI形式であればMatchDataオブジェクト、URI形式でない場合はnilが返却されます。
> URI::DEFAULT_PARSER.make_regexp.match('https://example.com') => #<MatchData "https://example.com" 1:"https" 2:nil 3:nil 4:"example.com" 5:nil 6:nil 7:nil 8:nil 9:nil> > URI::DEFAULT_PARSER.make_regexp.match('example.com') => nil
URL以外の文字列が含まれる場合は注意が必要
URL以外の文字列が含まれる場合、regexp.matchで最初に一致した結果がMatchDataとして返却されますので、その点は注意が必要です。
> match = URI::DEFAULT_PARSER.make_regexp.match('サイトURLはhttps://example.comです https://example.jp') => #<MatchData "https://example.com" 1:"https" 2:nil 3:nil 4:"example.com" 5:nil 6:nil 7:nil 8:nil 9:nil>
to_s
することで最初に一致したURLを取得できます。
> match.to_s => "https://example.com"
URL判定メソッドの実装例
以下のようなメソッドを実装してURL形式であるか判定することが可能です。
def url?(url_string) URI::DEFAULT_PARSER.make_regexp.match(url_string).present? end
とても便利なメソッドなのでぜひ使用してみてください。