3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

YouTubeのURLのみ登録を許可する正規表現を設定してみた【Ruby】

Last updated at Posted at 2020-08-21

#環境
ruby 2.6.5
rails 6.0.3

#前置き

今回実装したかった仕様はYouTubeの動画をユーザーが登録すること
その際にYouTube以外の動画サイトのURLを登録されると色々不都合が出てくるので
ユーザーが登録する動画URLはYouTubeのURLだけに限定したい

YouTubeのURLの特徴としては以下の2点

なので今回はこの2点を考慮してYouTubeのURLを判定する正規表現を作成していく

#正規表現
そして完成したのがこちらのvalidation

app/models/exercise.rb
validates :url, presence: true,
                  format: { with: /\A(https\:\/\/)?(www\.)?(youtube\.com\/watch\?v=|youtu\.be\/)+[\S]{11}\z/ }

正規表現だけ抜き出すとこんな感じ

/\A(https\:\/\/)?(www\.)?(youtube\.com\/watch\?v=|youtu\.be\/)+[\S]{11}\z/

これでYouTubeのURLのみデータベースに保存することが可能です。
rubyの場合はRubularというサイトで正規表現のチェックを行えます。

#ブラウザでの表示

ちなみに以下のようにすることでブラウザで動画を表示させる事が可能です。

app/views/exercise/exercise.html.erb
<iframe width="560" height="315" src="https://www.youtube.com/embed/<%= @exercise.url.last(11) %>"
        frameborder="0" allow="accelerometer; autoplay; encrypted-media;
        gyroscope; picture-in-picture" allowfullscreen>
</iframe>
app/controllers/exercise_controller.rb
@exercise = Exercise.find(params[:id])

#最後に

もうすこしうまく正規表現を書けば、最後の11文字だけを抽出して登録した方がいいかもです。
そうするとブラウザに表示するときに.last(11)が不要になるので。
私はここまでかなり苦戦したので余力がありませんでした・・・笑
時間がある時にまた考えてみようと思います。

あと実は他にもYouTubeのURLの形式って色々あります。
下記のように再生リストのURLだと全然形式違ったり・・・
https://www.youtube.com/watch?v=APdS9YQUWro&list=RDVFdLm6gEEE4&start_radio=1
検証段階で他にも確か全然違うURLがあったりとしましたが大変なので今回はメイン2種類に絞りました。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?