行動すれば次の現実

テック中心の個人ブログ

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

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

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