コンテンツへスキップ
uencoder

URL 検証の正規表現を書く

URL 検証の正規表現は、プロトコル、ドメイン、ポート、パス、クエリ、フラグメントを扱う必要があります。実用的なパターンと、URL パーサーを使うべき場面を学びましょう。

  1. 1

    URL は scheme://host:port/path?query#fragment という構造です。実用的な正規表現 ^https?://[a-zA-Z0-9.-]+(:\d+)?(/[^\s]*)?$ は基本構造を検証します。RFC 3986 に完全準拠するには、正規表現ではなく URL パーサーを使ってください。URL にはエンコードされた文字、括弧内の IPv6 アドレス、複雑なクエリ文字列が含まれ得て、正規表現ではうまく扱えません。

  2. 2
    正規表現テスター →

    URL のパターンをテストします。単純な ^https?://\S+$ は明らかに URL でないものを捕まえます。中程度の ^https?://[a-zA-Z0-9.-]+(:\d+)?(/[^\s]*)?$ は構造を確認します。有効な URL (http://example.com、https://sub.example.co.uk:8080/path?q=1#frag) と無効な URL (プロトコルなし、スペース、ホストなし) の両方でテストしてください。

  3. 3
    URL パーサー →

    完全な検証には、正規表現ではなく URL パーサーを使ってください。パーサーはすべての URL 構成要素、エンコーディング、IPv6、相対 URL を処理します。URL 検証において、正規表現より信頼できます。正規表現は簡単なチェックだけに使い、本番の検証にはパーサーを使ってください。

よくある質問

検証には正規表現と URL パーサーのどちらですか?
本番の検証には URL パーサー (JavaScript の URL コンストラクター、Python の urllib.parse) を使ってください。正規表現では扱えないすべての RFC 3986 のケース (IPv6、エンコードされた文字、相対 URL) を処理します。正規表現を使ってよいのは、クライアント側の簡単なヒントや、URL 形式を自分で制御している場合だけです。
http/https を必須にすべきですか?
Web の URL なら、はい。https を必須にしてください (開発用に http を許可するのは任意です)。一般的な URI なら、他のスキーム (ftp、mailto、file、カスタム) を許可してください。スキームが残りの形式を決めるため、スキームごとに検証します。ユーザー入力には URL パーサーを使い、プロトコルを明示的に確認してください。

このタスクを解決するワークフロー

関連ツール