【问题标题】:Check whether the extension is allowed or not using js strings使用js字符串检查是否允许扩展
【发布时间】:2021-09-03 06:48:58
【问题描述】:

我有一个系统,其中用户指定扩展名,如果允许给定扩展名,系统将返回 true,如果不允许,则返回 false。系统有一个预设的文件扩展名列表,用于确定是否允许和禁止给定的扩展名。

如果允许列表为空,则表示除禁止列表中的列表外,其他所有列表都允许。 如果禁止列表为空,则表示所有内容都被允许并且没有禁止扩展。 当两者都为空时,所有都被允许。

我试过了

var allowed = "";
var disallowed = "xlsx, docx, png";

function testAllowedOrNot(str) {
  var disallowedArray = disallowed.split(",").map(function(ext) {
    return ext.trim().toLowerCase()
  });

  var allowedArray = allowed.split(",").map(function(ext) {
    return ext.trim().toLowerCase()
  });

  return allowedArray.includes(str) && !disallowedArray.includes(str)

}

console.log(testAllowedOrNot("csv")) //must be true
console.log(testAllowedOrNot("xlsx")) //must be false
console.log(testAllowedOrNot("ico")) //must be true
console.log(testAllowedOrNot("jpg")) //must be true
console.log(testAllowedOrNot("docx")) //must be false

但它返回的都是假的。如何更改我的代码以获得预期的输出。

【问题讨论】:

  • 是的,因为您的允许列表为空
  • allowed 为空,因此allowedArray.includes(str)始终false
  • return (allowedArray.includes(str) || allowedArray.lenght === 0) && !disallowedArray.includes(str)
  • 为了更清楚,我已经修改了我的问题。我所期待的。
  • 但它返回的都是假的。如何更改我的代码以获得预期的输出。

标签: javascript arrays string


【解决方案1】:

阅读 cmets 为什么您的代码不起作用。

你错过了空 allowedArray 的测试

我必须重写代码以防你有允许

同时允许和禁止都没有多大意义,所以也许重新考虑一下?

const allowed = "";
const disallowed = "xlsx,docx,png"
const disallowedArray = disallowed.split(",").map(ext => ext.trim().toLowerCase()).filter(ext => ext !== "");
const allowedArray = allowed.split(",").map(ext => ext.trim().toLowerCase()).filter(ext => ext !== "")
const testAllowedOrNot = str => {
  if (allowedArray.length > 0) return allowedArray.includes(str)
  return disallowedArray.length === 0 || !disallowedArray.includes(str)
};

console.log(testAllowedOrNot("csv")) //must be true
console.log(testAllowedOrNot("xlsx")) //must be false
console.log(testAllowedOrNot("ico")) //must be true
console.log(testAllowedOrNot("jpg")) //must be true
console.log(testAllowedOrNot("docx")) //must be false

【讨论】:

  • @CodeGuy 请查看我的更新答案。有陷阱
  • 这是labnol.org/download-gmail-file-extensions-4475 的用例,这些人同时使用了允许和禁止列表。我不确定为什么?
  • 你的地图还返回一个带有一个空字符串的数组,所以我不得不重新编码
  • 是的,这是完美的,当有一个空的允许时,它会允许除不允许列表之外的所有列表。当允许列表中有扩展名时,我们只需要允许允许列表,禁止不允许列表。
  • 但是只允许允许列表使得禁止完全多余
【解决方案2】:

有两个问题:

  • allowedArray 将始终包含一个元素,因为将空字符串除以一个字符将返回空字符串
  • 你只想检查给定的扩展是否在黑名单上,如果你不使用白名单(意思是如果 allowedArray 中没有元素)

var allowed = "";
var disallowed = "xlsx, docx, png";

function testAllowedOrNot(str) {
  var disallowedArray = disallowed.split(",").map(function(ext) {
    return ext.trim().toLowerCase()
  });

  var allowedArray = [];
  if (allowed.length > 0) {
    allowedArray = allowed.split(",").map(function(ext) {
      return ext.trim().toLowerCase()
    });
  }

  if (allowedArray.length > 0) {
    return allowedArray.includes(str);
  } else {
    return !disallowedArray.includes(str);
  }
}

console.log(testAllowedOrNot("csv")) //must be true
console.log(testAllowedOrNot("xlsx")) //must be false
console.log(testAllowedOrNot("ico")) //must be true
console.log(testAllowedOrNot("jpg")) //must be true
console.log(testAllowedOrNot("docx")) //must be false

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-29
    • 2018-08-24
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多