PowerShell:除正则外,如何校验多格式文件名合规性?
文件名多格式校验思路指引
1. 模板化拆分校验方案
把50余种格式转化为结构化模板,每个模板明确各分段的要求(长度、类型、格式等)。比如针对ID-someID-otherID-date.xls,可以定义模板:
- 分段1:8位数字
- 分段2:10位字母数字混合
- 分段3:6位大写字母
- 分段4:YYYYMMDD格式日期
- 后缀:必须为
.xls
实现时:
- 先将文件名按
.拆分,分离前缀和后缀,校验后缀是否匹配模板要求 - 再将前缀按
-拆分为多个分段,逐个对应模板里的分段规则校验(比如用${#seg1}获取长度,用[[ $seg1 =~ ^[0-9]+$ ]]判断是否为数字,日期段可以用date -d "$seg4" +%Y%m%d 2>/dev/null验证合法性) - 把所有模板存成配置文件(比如每行一个格式,用
|分隔各段规则),脚本读取配置循环校验文件,不用硬编码所有格式
2. 分段特征化校验方案
如果部分格式的分段有专属特征(而非仅长度),可以拆分后对单段做针对性校验:
- 日期段:直接调用系统工具(如shell的
date、Python的datetime)验证是否为有效日期,不用纠结长度(比如YYYY-MM-DD和YYYYMMDD都能识别) - 枚举值段:如果某段只能是固定几个值(如
PRD/TEST/DEV),直接用case语句或数组匹配判断 - 前缀标识段:如果某段必须以特定字符串开头(如
AB-),直接用[[ $seg == AB* ]]判断
这种方式不用写复杂规则,把每个分段的校验拆成独立小逻辑,组合起来对应不同格式。
3. 格式分类复用校验方案
50余种格式大概率有重复类型,先按特征分类:
- 日期类:所有包含日期段的格式归为一类,通用日期校验逻辑
- 多ID类:包含3个以上ID段的格式归为一类,通用ID长度/类型校验
- 业务专属类:对应特定业务的格式,单独写小逻辑
分类后,针对每类写通用校验函数,再结合具体格式的细节要求(比如某类里的不同格式,ID段长度不同),减少重复代码,降低维护成本。
4. 组合式规则配置方案
把常见校验条件做成可复用的"原子规则",比如:
len:8:长度为8type:num:纯数字type:alnum:字母数字混合format:date_ymd:YYYYMMDD日期ext:xls:后缀为xls
然后每种格式就是这些原子规则的组合,比如ID-someID-otherID-date.xls对应的规则串为len:8|type:num, len:10|type:alnum, len:6|type:upper, format:date_ymd, ext:xls。脚本读取规则串后,拆分每个分段的校验规则,逐一应用到文件名的拆分段上。
这种方式扩展性极强,新增格式只需组合已有原子规则,不用写新的校验逻辑。
内容的提问来源于stack exchange,提问作者Lord Jabol
相关产品推荐
相关产品推荐

