防止应用程序从创建windows系统文件夹使用regex?

omhiaaxx  于 2023-08-07  发布在  Windows
关注(0)|答案(3)|浏览(118)

我正在构建一个基于浏览器的应用程序,它允许用户使用一些.json文件创建文件夹(没什么大不了的)。问题是,我使用的框架(NW.js)似乎并不关心允许用户创建名为“CON”或“NUL”的文件夹;这些都不应该被创建,里面的文件只是消失,它有点难以删除文件夹本身。
我可以做这样的事情来防止发生:

var newFolder = "nul";
function checkFolderName(text) {
    switch(newFolder) {
    case "con":
        console.log("folder can't be created")
        break;

    case "nul":
        console.log("folder can't be created")
        break;

    // and so on... there's about 23 windows-reserved names that I could find

    default:
        console.log("folder can be created")
}}
checkFolderName(newFolder);

字符串
但是我想知道是否有一些更简单的方法通过Regex/JavaScript来检查这一点,或者可能有一些不同的方法来实现这个想法。

vlf7wbxs

vlf7wbxs1#

这里有一个更简洁的方式来写你想要的东西。
函数被重命名以暗示它接受一个字符串并返回一个布尔值。
如果输入字符串无效,则返回false。
所有被禁止的名称都被分组在一个易于更新的列表中。
如果列表中包含该名称,则检查其有效性。

function isFolderNameValid (name) {
  let valid = false;
  if (!name || typeof(name) !== 'string') {
    return valid;
  }

  const bannedNames = [
    'con',
    'nul'
  ];

  if (!bannedNames.includes(name.toLowerCase())) {
    valid = true;
  }
  return valid;
}

if (isFolderNameValid('NUL')) {
  console.log('folder can be created');
} else {
  console.log('folder cannot be created');
}

字符串

0sgqnhkj

0sgqnhkj2#

我的朋友可以用 regex 来帮助我:

let valid = /^(con|prn|aux|nul|com|lpt)\d*$/gi.test(newFolder)
console.log(valid) // true or false

字符串
但是,如果您想添加更多 “禁止的名称”,它会变得非常笨拙,因此jaredcheeda的建议在这种情况下非常方便。

j2qf4p5b

j2qf4p5b3#

如果你想使用正则表达式,你可以这样做:

if (/^con|nul|abc|xyz$/.test(newFolder))
    console.log("folder can't be created");

字符串
|字符的意思是“或”。因此,如果newFolder"con""nul""abc""xyz",则测试函数将返回true
^$符号是字符串的开始和结束。
如果你想知道到底什么是非法的部分,你可以用这个:

var matching = newFolder.match(/^con|nul|abc|xyz$/);
if (matching) {
    console.log("folder can't be created, found " + matching[0]);
}


您也可以使用下列的switch case表示法:

switch (newFolder)
{
   case "con":
   case "nul":
   case "abc":
   case "xyz":
       console.log("folder can't be created");
       break;

   default: 
       console.log("folder can be created");
}

相关问题