You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何验证用户输入字符串是否为合法GIF文件名?

校验合法GIF输出路径/文件名的方案

针对你的需求,这里提供一套不依赖文件访问、覆盖所有输入类型的校验方案,核心是先区分输入场景,再针对性校验文件名合法性:

1. 核心校验逻辑框架

  • 先判断输入是否为合法目录(复用你已有的os.path.isdir(user_path))
  • 如果是完整文件路径,同时校验父目录存在性与文件名合法性
  • 如果是纯文件名,直接校验字符合规性与后缀要求

2. 文件名合法性校验(跨平台纯字符校验)

不同操作系统的非法文件名规则有差异,以下是完全不触碰文件的字符层面校验:

2.1 定义非法字符与系统保留名

import sys

def get_invalid_filename_chars():
    # Windows非法字符:<>:"/\|?*;类Unix仅禁止/
    if sys.platform.startswith('win'):
        return '<>:"/\\|?*'
    else:
        return '/'

def is_windows_reserved_name(filename):
    # Windows系统保留名(如con、prn这类无法作为文件名)
    if not sys.platform.startswith('win'):
        return False
    base_name = filename.split('.')[0].lower()
    reserved_names = {'con', 'prn', 'aux', 'nul', 
                      'com1','com2','com3','com4','com5','com6','com7','com8','com9',
                      'lpt1','lpt2','lpt3','lpt4','lpt5','lpt6','lpt7','lpt8','lpt9'}
    return base_name in reserved_names

2.2 文件名校验函数

import re

def is_valid_gif_filename(filename):
    # 排除空文件名或仅含空白字符的情况
    if not filename.strip():
        return False
    # 校验Windows系统保留名
    if is_windows_reserved_name(filename):
        return False
    # 校验是否包含非法字符
    invalid_chars = get_invalid_filename_chars()
    if re.search(f'[{re.escape(invalid_chars)}]', filename):
        return False
    # 校验后缀是否为.gif
    return filename.endswith('.gif')

3. 整合完整校验逻辑

把场景判断和文件名校验结合,覆盖所有输入情况:

import os

def is_valid_gif_output_path(user_path):
    # 场景1:输入是合法目录
    if os.path.isdir(user_path):
        return True
    # 拆分路径的目录部分与文件名部分
    dir_part = os.path.dirname(user_path)
    filename = os.path.basename(user_path)
    # 场景2:输入是纯文件名(无目录前缀)
    if not dir_part:
        return is_valid_gif_filename(filename)
    # 场景3:输入是完整文件路径,校验父目录存在+文件名合法
    return os.path.isdir(dir_part) and is_valid_gif_filename(filename)

关键说明

  • 全程无文件读写操作:所有校验基于字符规则和路径字符串解析,符合你“不触碰文件”的要求
  • 跨平台兼容:自动适配Windows和类Unix系统的文件名规则
  • 覆盖边界情况:排除空文件名、Windows系统保留名、非法字符等问题

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 08:25:18