【delphi】正则判断windows完整合法文件名,包括路径

Delphi 中,可以使用正则表达式来检查 Windows 文件名称或路径是否合法。合法的文件名和路径要求符合以下几点:

  1. 禁止的字符:文件名和路径不能包含以下字符:<, >, :, ", /, \, |, ?, *
  2. 文件名不能以空格或点结束
  3. 长度限制:文件名最长为 255 个字符,路径最长为 260 个字符。

要更严格地检查 Windows 文件路径的合法性,除了排除不允许的字符外,还需要加入对以下情况的检测:

  1. 连续两个反斜杠(\) 在路径中是不合法的。
  2. 合法的盘符:路径应该以合法的盘符开头(如 C:\ 等),或者是以网络路径 \\ 开头。
  3. 路径中的每个文件夹名也应合法:即每个文件夹名不能包含非法字符、不能以空格或点结束。

为了实现以上点,可以利用正则表达式并添加一些额外的逻辑处理。以下是解决方案。

  • 首先检查路径长度是否符合要求(文件名最长 255 字符,路径最长 260 字符)。
  • 然后使用正则表达式来匹配文件名,确保不含非法字符并且文件名的最后一个字符不能是空格或点。

Delphi 代码示例:

usesSystem.RegularExpressions, System.SysUtils;function IsValidFileNameOrPath(const AFileName: string): Boolean;
varRegex: TRegEx;DrivePattern, NetworkPattern, PathPattern: string;
begin// 检查文件路径是否为空,是否超过260字符限制if (AFileName = '') or (Length(AFileName) > 260) thenExit(False);// 合法盘符模式,例如 C:\ 或 D:\DrivePattern := '^[a-zA-Z]:\\';// 网络路径模式,例如 \\server\shareNetworkPattern := '^\\\\[^<>:"/\\|?*]+\\[^<>:"/\\|?*]+';// 文件名和路径的基本合法性检查,排除非法字符和不合法的结尾// 该模式允许文件夹和文件名不包含非法字符,文件名或文件夹不能以空格或点结束PathPattern := '^(?!.*[\\/]{2,})[^<>:"/\\|?*]+[^ .]$';// 检查是否符合盘符路径或者网络路径的格式if TRegEx.IsMatch(AFileName, DrivePattern) or TRegEx.IsMatch(AFileName, NetworkPattern) thenbegin// 去掉盘符或者网络前缀,剩下的部分检查合法性Regex := TRegEx.Create(PathPattern, [roIgnoreCase]);// 按照目录分割,依次检查每一个路径片段是否合法Result := True;var Parts := AFileName.Split(['\']);for var Part in Parts dobeginif not Regex.IsMatch(Part) thenbeginResult := False;Break;end;end;endelseResult := False;
end;procedure TestFileNameValidation;
varTestFileName: string;
beginTestFileName := 'C:\Program Files\MyApp\data.txt'; // 示例路径if IsValidFileNameOrPath(TestFileName) thenWriteln('文件路径合法')elseWriteln('文件路径不合法');
end;beginTestFileNameValidation;
end.

验证逻辑:

  1. 盘符检查:通过正则表达式 ^[a-zA-Z]:\\ 来验证是否以合法的盘符开头(如 C:\D:\)。
  2. 网络路径检查:通过正则表达式 ^\\\\[^<>:"/\\|?*]+\\[^<>:"/\\|?*]+ 来验证网络路径是否合法(如 \\Server\Share)。
  3. 路径片段检查:将整个路径按照 \ 拆分为多个部分,逐个检查每个部分(文件夹和文件名)的合法性。使用正则表达式 ^(?!.*[\\/]{2,})[^<>:"/\\|?*]+[^ .]$ 来确保:
    • 不能包含非法字符。
    • 不允许连续的反斜杠(\\)。
    • 不能以空格或点结束。

解释:

  • 盘符和网络路径正则表达式

    • ^[a-zA-Z]:\\:用于检查以合法盘符开头的路径。
    • ^\\\\[^<>:"/\\|?*]+\\[^<>:"/\\|?*]+:用于检查网络路径,确保合法的服务器和共享文件夹名称。
  • 路径合法性正则表达式

    • ^(?!.*[\\/]{2,}):负向先行断言,确保没有连续的反斜杠或正斜杠。
    • [^<>:"/\\|?*]+[^ .]$:确保文件夹和文件名不包含非法字符,且不能以空格或点结尾。

测试用例:

procedure TestFileNameValidation;
beginWriteln(IsValidFileNameOrPath('C:\valid\path\file.txt'));  // 合法Writeln(IsValidFileNameOrPath('C:\invalid\\path\file.txt'));  // 不合法 - 连续的反斜杠Writeln(IsValidFileNameOrPath('C:\invalid|path\file.txt'));  // 不合法 - 包含非法字符 '|'Writeln(IsValidFileNameOrPath('\\server\share\file.txt'));   // 合法 - 网络路径Writeln(IsValidFileNameOrPath('\\server\\invalid\file.txt'));  // 不合法 - 连续的反斜杠Writeln(IsValidFileNameOrPath('C:\invalidpath\file.'));  // 不合法 - 文件名以点结尾
end;

总结:

这段代码通过严格的正则表达式和逻辑检查文件名和路径的合法性。它确保了路径中的每个片段都不会有非法字符、连续的反斜杠,并且合法的文件名不会以空格或点结尾。如果你想进一步增加其他规则(如长度、特殊情况),可以在此基础上进行扩展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/54484.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于Spring Cloud Gateway中 Filters的理解

Spring Cloud Gateway中 Filters的理解 Filters Filters拦截器的作用是&#xff0c;对请求进行处理 可以进行流量染色 ⭐增加请求头 例子 spring:cloud:gateway:routes:- id: add_request_header_routeuri: http://localhost:8123predicates:- Path/api/**filters:- AddR…

【图像压缩与重构】基于标准+改进BP神经网络

课题名称&#xff1a;基于标准改进BP神经网络的图像压缩与重构&#xff08;带GUI) 代码获取方式(付费&#xff09;&#xff1a; 相关资料&#xff1a; 1. 代码注释 2.BP神经网络原理文档资料 3.图像压缩原理文档资料 程序实例截图&#xff1a; 1. 基于标准BP神经网络的图…

windows下,用docker部署xinference,为什么老是提示localhost无法访问?

部署xinference有两种方式&#xff1a; 一、本地部署 &#xff08;略&#xff09; 二、使用Docker部署&#xff08;与运行&#xff09; 其中又包括&#xff1a; 1&#xff09;使用CPU的方式&#xff1a;&#xff08;略&#xff09; 1&#xff09;使用GPU的方式&#xff1…

计算机的错误计算(九十九)

摘要 讨论 的计算精度问题。 计算机的错误计算&#xff08;五十五&#xff09;、&#xff08;七十八&#xff09;以及&#xff08;九十六&#xff09;分别列出了 IEEE 754-2019[1]中的一些函数与运算。下面再截图给出其另外几个运算。 另外&#xff0c;计算机的错误计算&…

电气设备施工现场风险状态判断ai模型训练数据集

电气设备施工现场风险状态判断ai模型训练数据集 id:18 电气设备施工现场工人人工智能学习数据和工作环境安全数据&#xff0c;建立系统化管理体系&#xff0c;改变全球EHS范式&#xff0c;预防工业事故。数据集记录了387709例子电力设施建设以及施工现场相关的灾害安全环境数据…

软件设计画图,流程图、甘特图、时间轴图、系统架构图、网络拓扑图、E-R图、思维导图

目录 一、流程图 二、甘特图 三、时间轴图 四、系统架构图 五、网络拓扑图 六、E-R图 七、思维导图 一、流程图 是一种用符号表示算法、工作流或流程的图形。用不同的图形表示不同含义&#xff0c;如椭圆表示开始和结束、菱形表示判断等。 画图工具WPS office 应用市场…

prober found high clock drift,Linux服务器时间不能自动同步,导致服务器时间漂移解决办法。

文章目录 一、场景二、问题三、解决办法&#xff08;一&#xff09;给服务器添加访问网络能力&#xff08;二&#xff09;手动同步1. 检查有没有安装ntp2. 没有安装ntp则离线安装ntp2.1 下载安装包2.2 安装2.3 启动 ntp 3. 设置内部时钟源3.1 编辑/etc/ntp.conf3.1 重启ntp服务…

计算机毕业设计之:教学平台微信小程序(

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

【计算机网络篇】物理层

本文主要介绍计算机网络第二章节的物理层&#xff0c;文中的内容是我认为的重点内容&#xff0c;并非所有。参考的教材是谢希仁老师编著的《计算机网络》第8版。跟学视频课为河南科技大学郑瑞娟老师所讲计网。 文章目录 &#x1f3af;一.基本概念及公式 &#x1f383;基本概念…

天宝Trimble RealWorks2024.0.2注册机 点云后处理软件 点云三维重建软件

一、功能特色 1、强大的点云数据处理平台 Trimble Realworks2024是市面上先进的点云数据处理软件&#xff0c;能够配准、可视化、浏览和直接处理市面上几乎所有主流品牌扫描仪点云数据&#xff0c;包括Leica、Riegl、ZF、Faro、Topcon等。 2、业界领先的无目标全自动配准 T…

解决RabbitMQ设置TTL过期后不进入死信队列

解决RabbitMQ设置TTL过期后不进入死信队列 问题发现问题解决方法一&#xff1a;手动拒绝消息&#xff0c;并且重新放回队列中方法二&#xff1a;改为自动确认模式方法三&#xff1a;只监听死信队列&#xff0c;在死信队列里面处理业务逻辑 问题发现 最近再学习RabbitMQ过程中&…

排序-----选择排序

首先介绍几种排序的分类&#xff1a; 选择排序是每次都遍历&#xff0c;标记出最小的元素&#xff0c;然后把它放在前面。 本文介绍优化后的版本&#xff1a;每次遍历标记出最小的和最大的元素&#xff0c;分别放到前面和后面。&#xff08;注意这里是找到对应的下标&#xff0…

【西电电装实习】6. 手装无人机的蓝牙断连debug

文章目录 前言零、闪灯状态零零、翻滚角&#xff0c;俯仰角&#xff0c;偏航角一、问题描述二、现象解释三、解决方案参考文献 前言 在 西电无人机电装实习 时遇到的问题使用蓝牙芯片 CH582F。沁恒的蓝牙芯片CH582F是一款集成了BLE&#xff08;Bluetooth Low Energy&#xff0…

Unity制作角色溶解变成光点消失

Unity制作角色溶解变成光点消失 大家好&#xff0c;我是阿赵。   在很多游戏里面&#xff0c;角色死亡之后都会有一些特殊的消失方式。这里我也来做一种&#xff0c;角色溶解成光点消失的效果。 我还是随便拿了Unity的资源商店的免费资源来使用。不过由于这个角色自带没有死…

【楚怡杯】职业院校技能大赛 “云计算应用” 赛项样题六

某企业根据自身业务需求&#xff0c;实施数字化转型&#xff0c;规划和建设数字化平台&#xff0c;平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”&#xff0c;拟采用开源OpenStack搭建企业内部私有云平台&#xff0c;开源Kubernetes搭建云原生服务平台&#xff0c;选…

JVM字节码与局部变量表

文章目录 局部变量表javap字节码指令分类 指令指令数据类型前缀加载和存储指令加载常量算术指令其他指令 字节码示例说明 局部变量表 每个线程的帧栈是独立的&#xff0c;每个线程中的方法调用会产生栈帧&#xff0c;栈帧中保存着方法执行的信息&#xff0c;例如局部变量表。 …

防火墙配置变更管理

在任何组织中&#xff0c;当涉及到网络安全时&#xff0c;频繁地更换防火墙是必要的&#xff0c;实施简化的防火墙更改管理策略模板可以减少管理时间&#xff0c;还可以减少每次变更引入新的安全性或合规性问题的可能性。典型的防火墙变更管理流程将包括以下步骤&#xff1a; …

八股文-多线程、并发

八股文-多线程、并发 最近学到了一种方法&#xff0c;可以用于简历项目经验编写以及面试题目的回答 STAR法则&#xff1a;在什么背景下&#xff0c;你需要解决什么问题&#xff0c;你做了啥&#xff0c;得到了什么结果 情境&#xff08;Situation&#xff09;&#xff1a; 描…

无人机维修保养一对一教学技术详解

随着无人机技术的日益普及和应用的广泛深入&#xff0c;无人机的维修保养成为确保飞行安全、延长使用寿命的关键环节。为了培养专业的无人机维护人才&#xff0c;一对一教学成为了一种高效、针对性的培训方式。以下将详细解析无人机维修保养一对一教学的技术要点&#xff0c;涵…

QT Layout布局,隐藏其中的某些部件后,不影响原来的布局

最近在工作时&#xff0c;被要求&#xff0c;需要将布局中的某些部件隐藏后&#xff0c;但不能影响原来的布局。 现在记录解决方案&#xff01; 一、水平布局&#xff08;垂直布局一样&#xff09; ui中的布局 效果&#xff1a; 按钮可以任意隐藏&#xff0c;都不影响其中布…