You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在Python中验证易读简单URL——离线验证域名

支持无前缀域名的URL验证方案

我之前也碰到过这种头疼的需求——要验证URL,但用户输入的可能是不带http/https甚至www的纯域名,比如example.com,而现有的验证工具要么不支持这种格式,要么限制太死。结合你的需求,我整理了一个Python实现方案,完美适配你列出的允许格式,同时排除那些无效的输入。

核心思路

现有验证工具(比如validators库)需要URL带协议前缀才能正常工作,所以我们的核心步骤是:

  1. 先对输入做预处理:给没有协议前缀的输入补上http://
  2. 用验证工具检查处理后的URL有效性
  3. 额外做一层过滤,排除像example(无域名后缀)、乱码字符串这类明显无效的输入

代码实现

首先确保你安装了validators库:

pip install validators

然后是验证函数:

import validators
import re

def validate_custom_url(input_url):
    # 第一步:清理输入,去除前后空格
    cleaned_url = input_url.strip()
    if not cleaned_url:
        return False
    
    # 第二步:排除明显无效的输入(比如无点的纯字符串、大量特殊字符)
    # 检查是否至少包含一个点,且主要部分是合法的域名字符
    if '.' not in cleaned_url:
        return False
    # 匹配域名的基本规则:字母、数字、点、连字符、下划线,避免乱码
    if not re.match(r'^[a-zA-Z0-9.-_]+$', cleaned_url.replace('/', '')):
        return False
    
    # 第三步:给无协议前缀的URL补上http://
    if not cleaned_url.startswith(('http://', 'https://')):
        processed_url = f'http://{cleaned_url}'
    else:
        processed_url = cleaned_url
    
    # 第四步:用validators验证处理后的URL
    return validators.url(processed_url) is True

测试示例

我们来测试你列出的允许和不允许的格式:

  • 允许的格式测试:
    • validate_custom_url("http://www.example.berlin")True
    • validate_custom_url("https://example.de/more")True
    • validate_custom_url("www.sub.example.de")True
    • validate_custom_url("example.de")True
  • 不允许的格式测试:
    • validate_custom_url("example")False(无域名后缀)
    • validate_custom_url("1 ::::: .....")False(包含非法特殊字符)

这个函数既满足了无前缀域名的验证需求,又能有效过滤掉明显无效的输入,完全适配你的要求。

内容的提问来源于stack exchange,提问作者oxidworks

火山引擎 最新活动