如何使用正则表达式阻止应用创建Windows系统保留名称的文件夹?
方案1:正则表达式实现(代码最精简)
Windows 系统的保留名规则非常统一,直接用正则匹配即可,自动适配大小写、带后缀的无效名称(比如CON.txt、Nul.json也属于无效命名):
function checkFolderName(text) { // 匹配所有Windows保留名,忽略大小写,支持带后缀的无效名判断 const reservedReg = /^(con|prn|aux|nul|com[1-9]|lpt[1-9])(\..*)?$/i if (reservedReg.test(text.trim())) { console.log("folder can't be created") return false } // 额外补充非法字符校验,避免其他创建失败情况 if (/[\\/:*?"<>|]/.test(text)) { console.log("folder name contains invalid characters") return false } console.log("folder can be created") return true }
正则说明:
i修饰符:不区分大小写,自动拦截CON、Nul、nul等各种大小写组合(\..*)?$:匹配保留名后面跟任意后缀的情况,覆盖CON.json这类无效命名com[1-9]/lpt[1-9]:一次性匹配1-9的COM/LPT设备名,不用逐个写
方案2:数组匹配(可读性、可维护性更高)
如果后续需要自定义添加其他禁用名称,用数组存保留名的方式更方便修改:
function checkFolderName(text) { const winReservedNames = [ 'con', 'prn', 'aux', 'nul', 'com1', 'com2', 'com3', 'com4', 'com5', 'com6', 'com7', 'com8', 'com9', 'lpt1', 'lpt2', 'lpt3', 'lpt4', 'lpt5', 'lpt6', 'lpt7', 'lpt8', 'lpt9' ] const inputName = text.trim().split('.')[0].toLowerCase() if (winReservedNames.includes(inputName)) { console.log("folder can't be created") return false } // 同样补充非法字符校验 if (/[\\/:*?"<>|]/.test(text)) { console.log("folder name contains invalid characters") return false } console.log("folder can be created") return true }
两种方案都比逐个写switch分支高效很多,实际使用可以根据自己的需求选择。
内容的提问来源于stack exchange,提问作者agata_m
相关产品推荐
相关产品推荐

