LoginSignup
2
2

More than 3 years have passed since last update.

LaravelでDBに入っている値がURL文字列かどうか調べる

Last updated at Posted at 2020-04-02

はじめに

URLかどうかなんてDBに入れる前にフォームバリデーションで調べれば良いような気はしますが、それだとお客さんの要件にかなわないこともあるのです。つらい。

鬼の正規表現で調べても良いのですけど、そもそもLaravelにはURL文字列かどうか調べる機能はあるし、自力で鬼の正規表現を書くよりイケてる判定ができそうな気がするので、そいつを利用させてもらいたいものです。

基本的にバリデーションはRequestクラスをベースにしたRequestに面倒見させて、Controller側ではそいつをDIするってのが筋の良い書き方だとは思うのですが、そうじゃない使い方もできます。

Validatorインスタンスをmakeしようぜ

ちょっと長いのですが、実はこんな感じにするとValidatorは作れるのです。

// なんかDBのデータ取ってくる。こいつはurlというvarcharのカラムを持っていることとする。
$hoge_model = HogeModel::find($id);

// Validator::makeの第一引数は配列しか受けられないのでtoArrayしておく
$validator = Validator::make($hoge_model->toArray(), [
    'url' => 'url'
]);

こんな感じにするとValidatorインスタンスを作ることができます。
第2引数は君らの好きなバリデーションルールです。

あとは

$validator->fails()

でバリデーションがしくじってたら true が返ってきます。つまりちゃんとURL文字列であれば false になるってことですね!

(追記)もっと簡単なやり方あった。

urlヘルパのこと調べてたらこんなんあったんかワレー!

URL::isValidUrl($url); // true or false
2
2
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
2
2