为了账号安全,请及时绑定邮箱和手机立即绑定

检查黑名单字符的数组

检查黑名单字符的数组

30秒到达战场 2023-02-17 17:25:31
我有一个每次运行都未知的数组我有这个功能function checkIllegal(args, refuse) {        var block = fs.readFileSync(`block.txt`, 'utf-8');        var refuse = block.split(',');        var args = message.content.slice(prefix.length).trim().split(/ +/g);        for (let i = 0; i < refuse.length; i++) {          for (let j = 0; j < args.length; j++) {            console.log(refuse[i], args[j])            if (args[j].includes(refuse[i])) {              console.log("Blacklisted")              illegal = "true";            }          }        }        illegal = "false";        return false;      } // Check for illegal arguments.它会找到列入黑名单的字符,但只有当没有多个字符时才会发现,例如,如果有一个,它就会阻止;但如果有两个像 ;;我该如何解决这个问题并使其正常工作?注意:下面给出的答案有效,但仅适用于硬编码数组。
查看完整描述

2 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

我会在函数外构建refuse和数组并将它们作为参数传递。args


const refuse = [">", ";", "&", ","]

const args = [">>>>", ";;;;;;", "&&", ",,"]



function checkIllegal(refuse, args) {

  let illegal = false;

  refuse.forEach(e => {

    args.forEach(string => {

      if (string.includes(e)) illegal = true;

      console.log("Blacklisted");

    });

  });

  return illegal;

}


console.log(checkIllegal(refuse, args));

这仍然基于整个数组而不是每个字符串返回 true 或 false ,这是你需要的吗?

否则我不会在函数内部而是在函数外部循环遍历 args,然后您可以检查每个字符串。


查看完整回答
反对 回复 2023-02-17
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

https://jsfiddle.net/x24qnes6/


以下解决方案适用于单个字符和多个字符


function isRefused() {

  const refuse = ">,>>,>,&,|,;,".split(',')

  const args = "; ;; | > << >>".trim().split(/ +/g);

  let illegal = false;

   refuse.forEach(r => {

      args.forEach(a => {

        if (a.includes(r)) {

          console.log(`${a} is blacklisted`)

          illegal = true;

        }

      })

    })

  return illegal;

}


console.log(`Blacklisted? ${isRefused()}`)

你必须反过来检查。args[j]有没有refused[i]

然而,更好的方法是为此使用正则表达式。


查看完整回答
反对 回复 2023-02-17
  • 2 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信