PHPで文字列がURLかどうか判定する方法を紹介!
ある文字列がURLを表す文字列なのかどうかを判定したい場面が少なからずあります。PHPでは文字列がURLかどうかを判定するための関数がいくつか用意されています。この記事ではそれらの関数を用いて、文字列がURLかどうかを判定する方法を紹介しています。
PHPで文字列がURLかどうか判定したい
PHPで文字列が正しいURLかどうかをチェックしたいという機会が少なからずあります。
今回はPHPで送られてきた文字列がURL形式の文字列かどうかを判定する方法を紹介します。
PHPで文字列がURLかどうか判定する方法
PHPで文字列がURLかどうか判定する2つの方法をサンプルコードを使って解説していきます。
正規表現
まずは正規表現を用いて、文字列がURLかどうかをチェックしていきます。
PHPで正規表現の判定を行うにはpreg_match
関数を使います。
第一引数にはURL形式を表現した正規表現の文字列$pattern
、第二引数にはURL形式かどうかを判定したい対象の文字列$url
を指定しています。また、第三引数に配列$arr
を指定することで、$arr
に検索結果が代入されます。
パターンにマッチすれば1
を返して、対象文字列はURL形式の文字列だと判定できます。パターンにマッチせず0
を返せば、対象文字列はURL形式の文字列ではないと判定できます。if
文で条件分岐を行い、結果を表示して分かるようにします。
preg_match
関数の詳しい使い方は下記の記事でも紹介していますので、ぜひ参考にしてみてください。
filter_var関数
次にfilter_var
関数を用いて、文字列がURLかどうかをチェックしていきます。
filter_var
関数を用いた方が、正規表現を使うpreg_match
関数を用いてチェックしたときよりコードが短くシンプルですね。
filter_var
関数は指定したフィルタでデータをフィルタリングします。
第一引数にはURL形式かどうかを判定したい対象文字列を指定します。
第二引数には適用するフィルタを指定します。今回はURLの判定を行いたいので、FILTER_VALIDATE_URL
を指定します。
フィルタリングに成功した場合は、フィルタリングされたデータを返します。失敗した場合は、false
を返します。
まとめ
今回、PHPで文字列がURLかどうかを判定するためにサンプルコードを用いてpreg_match
関数とfilter_match
関数を使って、チェックする方法を紹介しました。
しかし、どちらの関数を用いた場合でもASCIIのURLのみを正しいと判断します。URLに日本語を含む場合や国際化ドメイン名などの場合は正しい判断ができない可能性があることに注意してください。
