当涉及大写字母时,JavaScript 不会删除文本

所以我在我的网站上有一个文本框,我已经对它进行了编码以防止使用某些词。


window.onload = function() {

  var banned = ['MMM', 'XXX'];


  document.getElementById('input_1_17').addEventListener('keyup', function(e) {

    var text = document.getElementById('input_1_17').value;


    for (var x = 0; x < banned.length; x++) {

      if (text.toLowerCase().search(banned[x]) !== -1) {

        alert(banned[x] + ' is not allowed!');

      }


      var regExp = new RegExp(banned[x]);


      text = text.replace(regExp, '');

    }


    document.getElementById('input_1_17').value = text;

  }, false);

}

该代码完美运行,并在所有键入的字母均为小写时从文本框中删除文本。问题是当文本包含大写字母时,它会给出错误,但不会从文本框中删除该单词。


侃侃尔雅
浏览 152回答 3
3回答

慕勒3428872

这RegExp是一个很好的方向,只是你需要一些标志(使其不i区分大小写,并且是g局部的——所以替换所有出现的):var text="Under the xxx\nUnder the XXx\nDarling it's MMM\nDown where it's mmM\nTake it from me";console.log("Obscene:",text);var banned=["XXX","MMM"];banned.forEach(nastiness=>{&nbsp; text=text.replace(new RegExp(nastiness,"gi"),"");});console.log("Okay:",text);

人到中年有点甜

通常,您应该.toLowerCase()在比较时使用双方,strings以便它们可以在逻辑上匹配。但问题实际上是从正则表达式来你使用,你在哪里忽略大小写,你只需要添加的i标志吧:var&nbsp;regExp&nbsp;=&nbsp;new&nbsp;RegExp(banned[x],&nbsp;'gi'); text&nbsp;=&nbsp;text.replace(regExp,&nbsp;'');笔记:另请注意,alert()不建议使用in 循环,您可以更改逻辑以仅在一个 中提醒所有匹配的项目alert()。

撒科打诨

您实际上可以做的是将两个变量都转换为全部大写或全部小写。if (text.toLowerCase().includes(banned[x].toLowerCase())) {&nbsp; alert(banned[x] + ' is not allowed!');}未经测试,但它应该可以工作。无需使用,search因为无论如何您都不需要索引。使用includes更干净。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript