行動すれば次の現実

ほどよくモダンなシステム開発を目指しています。メインテーマは生産性、Ruby、Javascriptです。

Rubyで文字列がURL形式かどうか正規表現でチェックする | Rails

rubyで文字列がURL形式であるかチェックするには URI::DEFAULT_PARSER.make_regexp.matchを使用すれば良いです。

引数に渡された文字列がURI形式であるかチェックできます。

URI形式であればMatchDataオブジェクト、違う場合は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形式であるか判定することが可能です。

def url?(url_string)
  URI::DEFAULT_PARSER.make_regexp.match(url_string).present?
end

URL以外の文字列が含まれていても、regexp.matchで最初に一致した結果がMatchDataとして返却されます。 to_sすることで一致したURLを取得できます。

> 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>

> match.to_s
=> "https://example.com"

とても便利なメソッドなのでぜひ使用してみてください。