NewIntroducing QODEX QA Services — platform-powered QA for API-driven teams.Learn more →
URL Regex Pythonバリデーター

URL Regex Pythonバリデーター

URL Regex Pythonバリデーターを使用して、PythonでウェブサイトリンクのURLパターンを正確に検証できます。HTTP、HTTPS、複雑なパスなど、あらゆるURLが正しく有効であることを確認できます。さらに詳しいregexテストには、Python Regex TesterEmail Regex Pythonバリデーター、またはIP Address Regex Pythonバリデーターもご活用ください。

URL Regex Pythonバリデーター - ドキュメント

URL Regex Pythonバリデーターとは?

URL Regex Pythonバリデーターは、正規表現が有効なウェブアドレスに正しく一致するかどうかを確認するためのツールです。以下を検証します:

  • httpまたはhttpsなどのプロトコル

  • ドメイン名とサブドメイン

  • オプションのポート、パス、クエリパラメーター、フラグメント

Pythonのreモジュールをベースとしたこのツールは、フォーム検証、ウェブクローリング、データ解析、リンクチェックタスクに最適です。

よく使われるURL Regexパターン

  1. 基本的なHTTP/HTTPS URL

    ^(http|https):\/\/[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

    一致する例:http://example.com、https://qodex.ai

    一致しない例:example.com、ftp://server.com

  2. オプションのパスとクエリを含む完全なURL

    ^(http|https):\/\/[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(/[a-zA-Z0-9\-._~:/?#[\]@!$&'()*+,;=]*)?$

    一致する例:https://site.com/path?search=value、http://domain.org

  3. オプションのポートを含む

    ^(http|https):\/\/[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(:\d{2,5})?(\/.*)?$

    一致する例:http://localhost:8000/home、https://api.site.com:443/v1

Regexが実際に確認すること

  • ドメイン構造:少なくとも1つのサブドメインを強制し、ドメイン内のダッシュを許可し、各サブドメインとトップレベルドメインの長さ制限を確保します(各63文字以内、全体で253文字以内)。

  • トップレベルドメイン:英数字のみを許可します(ダッシュは不可)。

  • Localhostサポート:有効なドメインとしてlocalhostを許可します。

  • ポート番号:最大5桁のポートに任意で一致します(例::8080)。

  • IPv4アドレス:標準的なIPv4アドレスを認識します。

  • IPv6アドレス:IPv6の検証には専用のIPv6バリデーターを補完として使用することをお勧めします。

複雑なケースの処理

.co.ukのようなTLDや非標準のサブドメイン構造には、より柔軟なパターンが必要な場合があります:

  • オプションのプロトコル(例:http://、https://、またはなし)

  • オプションのサブドメイン(例:www.)

  • 複数部分のTLDのサポート(例:co.uk)

  • パス、クエリ文字列、フラグメント

  • ドメイン名内のハイフン

Pythonコード例

import re

def is_valid_url(url): pattern = re.compile(r'^(http|https)://[a-zA-Z0-9.-]+.[a-zA-Z]{2,}(/[a-zA-Z0-9-._~:/?#[]@!$&'()+,;=])?$') return bool(pattern.fullmatch(url))

URLテスト

print(is_valid_url("https://qodex.ai")) # True print(is_valid_url("http://example.com/path")) # True print(is_valid_url("ftp://invalid.com")) # False

Python Regex Testerでさまざまなパターンをお試しください。

バリデーションライブラリの活用

Regexは手軽で便利ですが、Pythonには強力なバリデーションライブラリもあります。

validatorsパッケージを使う

import validators
print(validators.url("http://localhost:8000")) # True
print(validators.url("ftp://invalid.com")) # ValidationFailure (Falseと評価)

より堅牢なコードには、常にboolを返すようにラップします:

import validators
from validators import ValidationFailure

def is_string_an_url(url_string: str) -> bool: result = validators.url(url_string.strip()) return result is True

ヒント:検証前に必ず空白をトリムしてください。前後の空白があると、ほとんどのバリデーターがURLを無効と判断します。

DjangoのURLValidatorを使う

from django.core.validators import URLValidator
from django.core.exceptions import ValidationError

def is_string_an_url(url_string: str) -> bool: validate_url = URLValidator() try: validate_url(url_string.strip()) return True except ValidationError: return False

print(is_string_an_url("https://example.com")) # True
print(is_string_an_url("not a url")) # False

Pydanticを使ったURL検証

Pydanticは、FastAPIや設定モデルのデータ解析・検証で有名ですが、URLデータ型も組み込みで提供しています:

  • AnyUrl:ほぼすべての有効なURLを許可します。

  • AnyHttpUrl:HTTPとHTTPS URLのみに制限します。

  • HttpUrl:HTTP/HTTPSを要求し、ホストとTLDのチェックが含まれます。

urllib.parseとRegexを組み合わせる

Pythonで徹底的にURLを検証するには、urllib.parseとregexを組み合わせるアプローチが効果的です:

  1. URLを分解する:urllib.parse.urlparse()でURLをコンポーネントに分割します。

  2. 各部分を検証する:スキーム(http/https)、ネットロック(ドメインまたはIP)、パスなどにregexを適用します。

  3. IPアドレスのサポート:IPv4またはIPv6アドレスを含むURLには、専用のパターンを使用します。

防御的なバリデーションのベストプラクティス

  • 空白のトリム:コピーペースト時に混入する前後の空白を除去します。

  • 空の入力チェックと最大長の制限:例として2048文字を上限にします。

  • スキームの検証:httpとhttpsのみ(または必要なプロトコル)を許可します。

  • ドメインの検証:regexまたはライブラリでドメインが適切な形式かを確認します。

url = "http://localhost:8000 "
is_valid = is_string_an_url(url.strip())  # True を返す

ユースケース

  • フォーム検証:ウェブフォームでユーザーが適切な構造のURLを送信しているか確認します。

  • データクリーニング:大規模データセット内の不正なリンクを除去または修正します。

  • クローラーとスクレーパー:コンテンツのクローリング前にURLを検証します。

  • セキュリティフィルタリング:不審なURLや不正なURLの保存・実行をブロックします。

関連ツール:

Regexメタキャラクター一覧

  • ^ : 文字列の先頭に一致

  • $ : 文字列の末尾に一致

  • . : 改行を除く任意の文字に一致

  • + : 直前のトークンに1回以上一致

  • * : 直前のトークンに0回以上一致

  • ? : 直前のトークンをオプションにする

  • [] : 括弧内の任意の1文字に一致

  • () : パターンをグループ化

  • | : OR演算子

  • : : ":"などの特殊文字をエスケープ

プロのヒント

  • エスケープの問題を回避するため、Pythonでは常に生文字列 (r'') を使用してください。

  • URLの完全一致を確認するために、アンカー ^ と $ を追加してください。

  • 必要に応じて非キャプチャグループ (?:...) を使用してください。

  • localhostやカスタムポートのテストには:localhost:\d{2,5} のようなregexを使用してください。

  • このバリデーターと IP Address Regex Pythonバリデーターを組み合わせてAPIや内部ツールの検証に活用してください。

Frequently Asked Questions

localhostや内部ドメインに一致させることはできますか?

はい。localhostや.localパターンを許可するようにregexを調整してください。

クエリパラメーターやフラグメントはサポートされていますか?

はい。拡張されたregexパターンには?key=value、#sectionなどが含まれています。

FTPやその他のプロトコルを検証したい場合はどうすればよいですか?

^(http|https|ftp)://... のようにパターンを変更してftpやfileなどを含めることができます。

URLに末尾スラッシュが含まれる場合に対応していますか?

はい。regexのオプションパス部分が末尾スラッシュを処理します。

DjangoやFlaskのフォーム検証に使用できますか?

はい。このパターンをフォームバリデーターやバックエンドチェック内で使用できます。

APIをテストしましょう!

平易な英語で記述するだけで、QodexがセキュアなAPIテストを自動生成します。