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

如何使用正则表达式阻止应用创建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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:06:07