URL Regex Python Validator

Search...

⌘K

URL Regex Python Validator

Search...

⌘K


URL Regex Python Validator

Use the URL Regex Python Validator to accurately test patterns for validating website links in Python. Whether you’re checking for http, https, or complex paths, this tool helps ensure your URLs are clean, correct, and reliable. For more regex testing, explore the Python Regex Tester, Email Regex Python Validator, or IP Address Regex Python Validator.

https://www.admin.google.com/
Possible security issues
This regex appears to be safe.
Explanation
  • [A-Z]: uppercase letters
  • [a-z]: lowercase letters
  • [0-9]: digits
  • \.: a literal dot
  • +: one or more of the preceding
  • *: zero or more of the preceding
  • ?: optional (zero or one)
  • ^: start of string
  • $: end of string
Test your APIs today!

Write in plain English — Qodex turns it into secure, ready-to-run tests.

Regular Expression - Documentation

What is the URL Regex Python Validator?


The URL Regex Python Validator is designed to help you check whether your regular expressions correctly match valid web addresses. This includes checking for:


  • Protocols like http or https

  • Domain names and subdomains

  • Optional ports, paths, query parameters, and fragments


It uses Python’s re module and is ideal for form validation, web crawling, data parsing, and link-checking tasks.


Common URL Regex Patterns


  1. Basic HTTP/HTTPS URL


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

    Matches: http://example.com, https://qodex.ai

    Does not match: example.com, ftp://server.com


  2. Full URL with Optional Paths & Queries


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

    Matches: https://site.com/path?search=value, http://domain.org


  3. With Optional Port


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

    Matches: http://localhost:8000/home, https://api.site.com:443/v1


Python Example Code


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))

# Test URLs
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

Try variations using the Python Regex Tester.


Alternative: Using Validation Libraries


While regex is great for quick URL checks, Python has some powerful validation libraries that can save you time and headaches, especially when edge cases start popping up.

Using the Package

The package provides simple functions for validating URLs (and many other types of data like emails and IP addresses). Here’s how you can use it:

import validators
print(validators.url("http://localhost:8000")) # True 
print(validators.url("ftp://invalid.com")) # ValidationFailure object (evaluates to False)

For more robust code, consider wrapping this check to always return a boolean:

import validators
from validators import ValidationFailure

def is_string_an_url(url_string: str) -> bool:
    # Always strip whitespace before validating!
    result = validators.url(url_string.strip())
    return result is True  # Only True is valid; ValidationFailure is falsy

Examples

print(is_string_an_url("http://localhost:8000")) # True 
print(is_string_an_url("http://.www.foo.bar/")) # False 
print(is_string_an_url("http://localhost:8000 ")) # True (after .strip())

Tip: Always trim leading and trailing spaces before validating URLs, as even a single space will cause most validators—including regex and libraries like —to reject the input.


Validation Using Django’s URLValidator

If you’re already using Django, leverage its built-in URL validator for comprehensive checks:

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

Examples

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

Adding Django just for its URL validation is probably overkill, but if you’re in a Django project already, this is one of the most reliable approaches.

With these approaches—regex for quick checks, and libraries for thorough validation—you can confidently handle URL validation in a variety of Python projects.


Using the Package for URL

If you prefer not to write your own regex, you can easily check if a string is a valid URL by using the popular validators Python package. Here’s a straightforward approach:

import validators

def is_valid_url(url_string):
    result = validators.url(url_string)
    return result is True  # Returns True if valid, False otherwise

# Example usage
print(is_valid_url("http://localhost:8000"))         # True
print(is_valid_url("http://.www.foo.bar/"))          # False
  • The function is_valid_url returns True only when the provided string passes all URL checks performed by the library.

  • Internally, validators.url() returns True when valid, or a ValidationFailure object when not—so this function keeps things simple.

Use this for quick, robust validation without wrangling regex patterns.


Quick tip: Always strip spaces before validation, especially if the URL is coming from user input or copy-paste operations.

This approach is efficient, readable, and saves you from reinventing the wheel when working with URLs in Python.


Using Django’s URLValidator to Check URLs in Python

Django comes with a handy built-in tool for validating URLs: the URLValidator from the django.core.validators module. This validator is designed to determine whether a given string matches the criteria for a valid web address. If you’re already using Django in your project, it’s a convenient and reliable approach for URL validation.

Here’s how you can use it:

  1. Import the Necessary Classes:

    • URLValidator for the actual validation

    • ValidationError to handle invalid cases

  2. Write a Simple Validation Function:

    from django.core.validators import URLValidator
    from django.core.exceptions import ValidationError
    
    def is_valid_url(url: str) -> bool:
        validator = URLValidator()
        try:
            validator(url)
            return True
        except ValidationError:
            return False
    • When you call validator(url), it checks if the url string adheres to standard URL patterns.

    • If the supplied value isn’t a valid URL, it raises a ValidationError. The function returns True for valid URLs and False for invalid ones.

While Django’s URLValidator is powerful, keep in mind that adding Django as a dependency may be unnecessary for lightweight projects. However, for those already using Django, it’s a robust option for all your URL validation needs.


How validators.url Works in Python

If you're looking for a quick, reliable way to check whether a string is a valid URL in Python, the validators package is a handy tool. Its url function makes URL validation straightforward—even for tricky cases.

How It Validates

  • Pass your URL as a string to validators.url().

  • If the input is a valid URL, you'll get True as the result.

  • If the URL is not valid, instead of a simple False, it returns an object called ValidationFailure. While this might feel a bit unexpected, it still makes it easy to know whether your URL passes or fails validation.

Example Usage

Here’s what a typical validation flow might look like:

import validators
from validators import ValidationFailure

def is_string_a_url(candidate: str) -> bool:
    result = validators.url(candidate)
    return False if isinstance(result, ValidationFailure) else result

# Checking results
print(is_string_a_url("http://localhost:8000"))      # Outputs: True
print(is_string_a_url("http://.www.foo.bar/"))       # Outputs: False

This approach ensures you're only working with recognized, well-formed URLs—perfect for situations where data quality matters most.


Django’s URL Validator vs. Standalone Packages

If you're considering URL validation for your project, you might wonder whether to rely on Django’s built-in utility or opt for a lightweight standalone package. Here’s a quick breakdown to help you weigh the options:

Advantages of Django’s URL Validator:

  • Comprehensive Checks: Django’s validator is well-tested, supports standard URL patterns, and even has an option to check if the URL actually exists (verify_exists).

  • Integration: Seamlessly fits within the rest of Django’s validation ecosystem, making it perfect for projects already using Django for forms or models.

  • Community and Documentation: You benefit from a large, active community and thorough documentation—making it easier to troubleshoot or extend.

Drawbacks to Consider:

  • Dependency Bloat: Including Django just for URL validation can be overkill—Django is a robust, full-featured framework, and significantly increases your project’s size and dependencies if you’re not already using it.

  • Complexity: For smaller scripts, microservices, or non-Django projects, a standalone library (such as validators or simple regex-based checks) will keep things lean and more easily maintained.

  • Performance: Extra dependencies sometimes add startup time and potential version conflicts, especially in minimalist environments.

Summary:
If your stack already uses Django, leveraging its URL validator is a solid and hassle-free choice. For lightweight projects or scripts, standalone validation packages or tailored regex rules will keep your footprint minimal and setup easier. Choose based on your project’s needs and existing tech stack!


Why Trim Whitespace Before URL Validation?

Before validating a URL, it’s essential to remove any leading or trailing spaces from the string. Even an extra space at the start or end—something easy to miss when copying and pasting—will cause most validation methods, including Python’s strict regex patterns, to treat the URL as invalid.

For example, "http://localhost:8000 " (with a trailing space) will fail validation, even though the actual URL is fine. By using Python’s strip() method, you ensure you’re testing the true URL as intended:

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

Trimming whitespace helps your validations stay reliable, prevents false negatives, and ensures your applications don’t accidentally reject legitimate URLs due to minor copy-paste issues.


Use Cases


  • Form Validation: Ensure users submit well-structured URLs in web forms.

  • Data Cleaning: Remove or fix malformed links in large datasets.

  • Crawlers & Scrapers: Verify URLs before crawling or scraping content.

  • Security Filtering: Block suspicious or malformed URLs from being stored or executed.


Useful tools:


Categorized Regex Metacharacters 


  • ^ : Matches the start of the string

  • $ : Matches the end of the string

  • . : Matches any character (except newline)

  • + : Matches one or more of the previous token

  • * : Matches zero or more of the previous token

  • ? : Makes the preceding token optional

  • [] : Matches any one character inside the brackets

  • () : Groups patterns

  • | : OR operator

  • \: : Escapes special characters like ":"

Pro Tips

  • Always use raw strings (r'') in Python to avoid escaping issues.

  • Add anchors ^ and $ to match the full URL and avoid partial matches.

  • Use non-capturing groups (?:...) for cleaner matching if needed.

  • Test localhost or custom ports using a regex like: localhost:\d{2,5}

  • Combine this validator with IP Address Regex Python Validator for APIs or internal tools.


Frequently asked questions

Can I match localhost or internal domains?×
Yes. Adjust the regex to allow patterns like localhost or .local.
Does this support query parameters or fragments?+
What if I want to validate FTP or other protocols?+
Can this match URLs with trailing slashes?+
Can I use this in Django or Flask form validation?+

URL Regex Python Validator

Search...

⌘K

URL Regex Python Validator

Search...

⌘K


URL Regex Python Validator

URL Regex Python Validator

Use the URL Regex Python Validator to accurately test patterns for validating website links in Python. Whether you’re checking for http, https, or complex paths, this tool helps ensure your URLs are clean, correct, and reliable. For more regex testing, explore the Python Regex Tester, Email Regex Python Validator, or IP Address Regex Python Validator.

https://www.admin.google.com/
Possible security issues
This regex appears to be safe.
Explanation
  • [A-Z]: uppercase letters
  • [a-z]: lowercase letters
  • [0-9]: digits
  • \.: a literal dot
  • +: one or more of the preceding
  • *: zero or more of the preceding
  • ?: optional (zero or one)
  • ^: start of string
  • $: end of string
Test your APIs today!

Write in plain English — Qodex turns it into secure, ready-to-run tests.

Regular Expression - Documentation

What is the URL Regex Python Validator?


The URL Regex Python Validator is designed to help you check whether your regular expressions correctly match valid web addresses. This includes checking for:


  • Protocols like http or https

  • Domain names and subdomains

  • Optional ports, paths, query parameters, and fragments


It uses Python’s re module and is ideal for form validation, web crawling, data parsing, and link-checking tasks.


Common URL Regex Patterns


  1. Basic HTTP/HTTPS URL


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

    Matches: http://example.com, https://qodex.ai

    Does not match: example.com, ftp://server.com


  2. Full URL with Optional Paths & Queries


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

    Matches: https://site.com/path?search=value, http://domain.org


  3. With Optional Port


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

    Matches: http://localhost:8000/home, https://api.site.com:443/v1


Python Example Code


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))

# Test URLs
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

Try variations using the Python Regex Tester.


Alternative: Using Validation Libraries


While regex is great for quick URL checks, Python has some powerful validation libraries that can save you time and headaches, especially when edge cases start popping up.

Using the Package

The package provides simple functions for validating URLs (and many other types of data like emails and IP addresses). Here’s how you can use it:

import validators
print(validators.url("http://localhost:8000")) # True 
print(validators.url("ftp://invalid.com")) # ValidationFailure object (evaluates to False)

For more robust code, consider wrapping this check to always return a boolean:

import validators
from validators import ValidationFailure

def is_string_an_url(url_string: str) -> bool:
    # Always strip whitespace before validating!
    result = validators.url(url_string.strip())
    return result is True  # Only True is valid; ValidationFailure is falsy

Examples

print(is_string_an_url("http://localhost:8000")) # True 
print(is_string_an_url("http://.www.foo.bar/")) # False 
print(is_string_an_url("http://localhost:8000 ")) # True (after .strip())

Tip: Always trim leading and trailing spaces before validating URLs, as even a single space will cause most validators—including regex and libraries like —to reject the input.


Validation Using Django’s URLValidator

If you’re already using Django, leverage its built-in URL validator for comprehensive checks:

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

Examples

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

Adding Django just for its URL validation is probably overkill, but if you’re in a Django project already, this is one of the most reliable approaches.

With these approaches—regex for quick checks, and libraries for thorough validation—you can confidently handle URL validation in a variety of Python projects.


Using the Package for URL

If you prefer not to write your own regex, you can easily check if a string is a valid URL by using the popular validators Python package. Here’s a straightforward approach:

import validators

def is_valid_url(url_string):
    result = validators.url(url_string)
    return result is True  # Returns True if valid, False otherwise

# Example usage
print(is_valid_url("http://localhost:8000"))         # True
print(is_valid_url("http://.www.foo.bar/"))          # False
  • The function is_valid_url returns True only when the provided string passes all URL checks performed by the library.

  • Internally, validators.url() returns True when valid, or a ValidationFailure object when not—so this function keeps things simple.

Use this for quick, robust validation without wrangling regex patterns.


Quick tip: Always strip spaces before validation, especially if the URL is coming from user input or copy-paste operations.

This approach is efficient, readable, and saves you from reinventing the wheel when working with URLs in Python.


Using Django’s URLValidator to Check URLs in Python

Django comes with a handy built-in tool for validating URLs: the URLValidator from the django.core.validators module. This validator is designed to determine whether a given string matches the criteria for a valid web address. If you’re already using Django in your project, it’s a convenient and reliable approach for URL validation.

Here’s how you can use it:

  1. Import the Necessary Classes:

    • URLValidator for the actual validation

    • ValidationError to handle invalid cases

  2. Write a Simple Validation Function:

    from django.core.validators import URLValidator
    from django.core.exceptions import ValidationError
    
    def is_valid_url(url: str) -> bool:
        validator = URLValidator()
        try:
            validator(url)
            return True
        except ValidationError:
            return False
    • When you call validator(url), it checks if the url string adheres to standard URL patterns.

    • If the supplied value isn’t a valid URL, it raises a ValidationError. The function returns True for valid URLs and False for invalid ones.

While Django’s URLValidator is powerful, keep in mind that adding Django as a dependency may be unnecessary for lightweight projects. However, for those already using Django, it’s a robust option for all your URL validation needs.


How validators.url Works in Python

If you're looking for a quick, reliable way to check whether a string is a valid URL in Python, the validators package is a handy tool. Its url function makes URL validation straightforward—even for tricky cases.

How It Validates

  • Pass your URL as a string to validators.url().

  • If the input is a valid URL, you'll get True as the result.

  • If the URL is not valid, instead of a simple False, it returns an object called ValidationFailure. While this might feel a bit unexpected, it still makes it easy to know whether your URL passes or fails validation.

Example Usage

Here’s what a typical validation flow might look like:

import validators
from validators import ValidationFailure

def is_string_a_url(candidate: str) -> bool:
    result = validators.url(candidate)
    return False if isinstance(result, ValidationFailure) else result

# Checking results
print(is_string_a_url("http://localhost:8000"))      # Outputs: True
print(is_string_a_url("http://.www.foo.bar/"))       # Outputs: False

This approach ensures you're only working with recognized, well-formed URLs—perfect for situations where data quality matters most.


Django’s URL Validator vs. Standalone Packages

If you're considering URL validation for your project, you might wonder whether to rely on Django’s built-in utility or opt for a lightweight standalone package. Here’s a quick breakdown to help you weigh the options:

Advantages of Django’s URL Validator:

  • Comprehensive Checks: Django’s validator is well-tested, supports standard URL patterns, and even has an option to check if the URL actually exists (verify_exists).

  • Integration: Seamlessly fits within the rest of Django’s validation ecosystem, making it perfect for projects already using Django for forms or models.

  • Community and Documentation: You benefit from a large, active community and thorough documentation—making it easier to troubleshoot or extend.

Drawbacks to Consider:

  • Dependency Bloat: Including Django just for URL validation can be overkill—Django is a robust, full-featured framework, and significantly increases your project’s size and dependencies if you’re not already using it.

  • Complexity: For smaller scripts, microservices, or non-Django projects, a standalone library (such as validators or simple regex-based checks) will keep things lean and more easily maintained.

  • Performance: Extra dependencies sometimes add startup time and potential version conflicts, especially in minimalist environments.

Summary:
If your stack already uses Django, leveraging its URL validator is a solid and hassle-free choice. For lightweight projects or scripts, standalone validation packages or tailored regex rules will keep your footprint minimal and setup easier. Choose based on your project’s needs and existing tech stack!


Why Trim Whitespace Before URL Validation?

Before validating a URL, it’s essential to remove any leading or trailing spaces from the string. Even an extra space at the start or end—something easy to miss when copying and pasting—will cause most validation methods, including Python’s strict regex patterns, to treat the URL as invalid.

For example, "http://localhost:8000 " (with a trailing space) will fail validation, even though the actual URL is fine. By using Python’s strip() method, you ensure you’re testing the true URL as intended:

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

Trimming whitespace helps your validations stay reliable, prevents false negatives, and ensures your applications don’t accidentally reject legitimate URLs due to minor copy-paste issues.


Use Cases


  • Form Validation: Ensure users submit well-structured URLs in web forms.

  • Data Cleaning: Remove or fix malformed links in large datasets.

  • Crawlers & Scrapers: Verify URLs before crawling or scraping content.

  • Security Filtering: Block suspicious or malformed URLs from being stored or executed.


Useful tools:


Categorized Regex Metacharacters 


  • ^ : Matches the start of the string

  • $ : Matches the end of the string

  • . : Matches any character (except newline)

  • + : Matches one or more of the previous token

  • * : Matches zero or more of the previous token

  • ? : Makes the preceding token optional

  • [] : Matches any one character inside the brackets

  • () : Groups patterns

  • | : OR operator

  • \: : Escapes special characters like ":"

Pro Tips

  • Always use raw strings (r'') in Python to avoid escaping issues.

  • Add anchors ^ and $ to match the full URL and avoid partial matches.

  • Use non-capturing groups (?:...) for cleaner matching if needed.

  • Test localhost or custom ports using a regex like: localhost:\d{2,5}

  • Combine this validator with IP Address Regex Python Validator for APIs or internal tools.


Frequently asked questions

Can I match localhost or internal domains?×
Yes. Adjust the regex to allow patterns like localhost or .local.
Does this support query parameters or fragments?+
What if I want to validate FTP or other protocols?+
Can this match URLs with trailing slashes?+
Can I use this in Django or Flask form validation?+