
URL Regex Pythonバリデーター
URL Regex Pythonバリデーターを使用して、PythonでウェブサイトリンクのURLパターンを正確に検証できます。HTTP、HTTPS、複雑なパスなど、あらゆるURLが正しく有効であることを確認できます。さらに詳しいregexテストには、Python Regex Tester、Email Regex Pythonバリデーター、またはIP Address Regex Pythonバリデーターもご活用ください。
URL Regex Pythonバリデーター - ドキュメント
URL Regex Pythonバリデーターとは?
URL Regex Pythonバリデーターは、正規表現が有効なウェブアドレスに正しく一致するかどうかを確認するためのツールです。以下を検証します:
httpまたはhttpsなどのプロトコル
ドメイン名とサブドメイン
オプションのポート、パス、クエリパラメーター、フラグメント
Pythonのreモジュールをベースとしたこのツールは、フォーム検証、ウェブクローリング、データ解析、リンクチェックタスクに最適です。
よく使われるURL Regexパターン
基本的なHTTP/HTTPS URL
^(http|https):\/\/[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$一致する例:http://example.com、https://qodex.ai
一致しない例:example.com、ftp://server.com
オプションのパスとクエリを含む完全なURL
^(http|https):\/\/[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(/[a-zA-Z0-9\-._~:/?#[\]@!$&'()*+,;=]*)?$一致する例:https://site.com/path?search=value、http://domain.org
オプションのポートを含む
^(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 redef 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")) # FalsePydanticを使ったURL検証
Pydanticは、FastAPIや設定モデルのデータ解析・検証で有名ですが、URLデータ型も組み込みで提供しています:
AnyUrl:ほぼすべての有効なURLを許可します。AnyHttpUrl:HTTPとHTTPS URLのみに制限します。HttpUrl:HTTP/HTTPSを要求し、ホストとTLDのチェックが含まれます。
urllib.parseとRegexを組み合わせる
Pythonで徹底的にURLを検証するには、urllib.parseとregexを組み合わせるアプローチが効果的です:
URLを分解する:
urllib.parse.urlparse()でURLをコンポーネントに分割します。各部分を検証する:スキーム(http/https)、ネットロック(ドメインまたはIP)、パスなどにregexを適用します。
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の保存・実行をブロックします。
関連ツール:
IP Address Regex Pythonバリデーター - ネットワークベースのURLチェック
Email Regex Pythonバリデーター - コンタクトフォームの検証
Password Regex Pythonバリデーター - URLと並行してユーザー入力を保護
Regexメタキャラクター一覧
^: 文字列の先頭に一致$: 文字列の末尾に一致.: 改行を除く任意の文字に一致+: 直前のトークンに1回以上一致*: 直前のトークンに0回以上一致?: 直前のトークンをオプションにする[]: 括弧内の任意の1文字に一致(): パターンをグループ化|: OR演算子:: ":"などの特殊文字をエスケープ
プロのヒント
エスケープの問題を回避するため、Pythonでは常に生文字列 (r'') を使用してください。
URLの完全一致を確認するために、アンカー ^ と $ を追加してください。
必要に応じて非キャプチャグループ (?:...) を使用してください。
localhostやカスタムポートのテストには:localhost:\d{2,5} のようなregexを使用してください。
このバリデーターと IP Address Regex Pythonバリデーターを組み合わせてAPIや内部ツールの検証に活用してください。
Frequently Asked Questions
localhostや内部ドメインに一致させることはできますか?
クエリパラメーターやフラグメントはサポートされていますか?
FTPやその他のプロトコルを検証したい場合はどうすればよいですか?
URLに末尾スラッシュが含まれる場合に対応していますか?
DjangoやFlaskのフォーム検証に使用できますか?
Related Articles






