检查黑名单字符的数组

我有一个每次运行都未知的数组我有这个功能


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.

它会找到列入黑名单的字符,但只有当没有多个字符时才会发现,例如,如果有一个,它就会阻止;但如果有两个像 ;;


我该如何解决这个问题并使其正常工作?


注意:下面给出的答案有效,但仅适用于硬编码数组。


30秒到达战场
浏览 99回答 2
2回答

海绵宝宝撒

我会在函数外构建refuse和数组并将它们作为参数传递。argsconst refuse = [">", ";", "&", ","]const args = [">>>>", ";;;;;;", "&&", ",,"]function checkIllegal(refuse, args) {&nbsp; let illegal = false;&nbsp; refuse.forEach(e => {&nbsp; &nbsp; args.forEach(string => {&nbsp; &nbsp; &nbsp; if (string.includes(e)) illegal = true;&nbsp; &nbsp; &nbsp; console.log("Blacklisted");&nbsp; &nbsp; });&nbsp; });&nbsp; return illegal;}console.log(checkIllegal(refuse, args));这仍然基于整个数组而不是每个字符串返回 true 或 false ,这是你需要的吗?否则我不会在函数内部而是在函数外部循环遍历 args,然后您可以检查每个字符串。

杨__羊羊

https://jsfiddle.net/x24qnes6/以下解决方案适用于单个字符和多个字符function isRefused() {&nbsp; const refuse = ">,>>,>,&,|,;,".split(',')&nbsp; const args = "; ;; | > << >>".trim().split(/ +/g);&nbsp; let illegal = false;&nbsp; &nbsp;refuse.forEach(r => {&nbsp; &nbsp; &nbsp; args.forEach(a => {&nbsp; &nbsp; &nbsp; &nbsp; if (a.includes(r)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.log(`${a} is blacklisted`)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; illegal = true;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; })&nbsp; &nbsp; })&nbsp; return illegal;}console.log(`Blacklisted? ${isRefused()}`)你必须反过来检查。args[j]有没有refused[i]然而,更好的方法是为此使用正则表达式。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript