PHPでURLかどうかを判定し、処理を分岐する方法

Webアプリケーションを開発している際、特定の文字列がURLであるかどうかを判定するケースは少なくありません。例えば、ユーザーからの入力を検証するときや、外部APIから取得したデータにURLが含まれているかを確認する場合などです。今回は、PHPでURLを判定し、その結果に基づいて処理を分岐する方法を2つご紹介します。

filter_var 関数を使用する

PHPの標準ライブラリには、filter_varという便利な関数があります。この関数は、指定されたフィルタで値を検証またはサニタイズするために使用されます。

$url = "http://example.com";

if (filter_var($url, FILTER_VALIDATE_URL)) {
    echo "This is a valid URL.";
} else {
    echo "This is not a valid URL.";
}

この方法の最大の利点は、シンプルで簡単に実装できることです。ただし、filter_var関数が判定するのは形式のみであり、URLが実際に存在するかどうか、または到達可能であるかどうかは判断しません。

preg_match関数で正規表現を使用する

$url = "http://example.com";
$pattern = "/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/";

if (preg_match($pattern, $url)) {
    echo "This is a valid URL.";
} else {
    echo "This is not a valid URL.";
}

preg_matchを使用する最大の利点は、URLの形式を自分で定義できる柔軟性があることです。一方で、正規表現のパターンが複雑であればあるほど、コードの可読性が低くなる可能性があります。

まとめ

以上がPHPでURLかどうかを判定し、その結果に基づいて処理を分岐する二つの主な方法です。filter_varは簡単に導入できる一方で、preg_matchと正規表現は高度なカスタマイズが可能です。プロジェクトの要件に応じて、適切な方法を選びましょう。