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

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

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

侃侃尔雅 2021-11-04 10:38:20
所以我在我的网站上有一个文本框,我已经对它进行了编码以防止使用某些词。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);}该代码完美运行,并在所有键入的字母均为小写时从文本框中删除文本。问题是当文本包含大写字母时,它会给出错误,但不会从文本框中删除该单词。
查看完整描述

3 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

这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=>{

  text=text.replace(new RegExp(nastiness,"gi"),"");

});

console.log("Okay:",text);


查看完整回答
反对 回复 2021-11-04
?
人到中年有点甜

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

通常,您应该.toLowerCase()在比较时使用双方,strings以便它们可以在逻辑上匹配。

但问题实际上是从正则表达式来你使用,你在哪里忽略大小写,你只需要添加i标志吧:

var regExp = new RegExp(banned[x], 'gi');
text = text.replace(regExp, '');

笔记:

另请注意,alert()不建议使用in 循环,您可以更改逻辑以仅在一个 中提醒所有匹配的项目alert()


查看完整回答
反对 回复 2021-11-04
?
撒科打诨

TA贡献1934条经验 获得超2个赞

您实际上可以做的是将两个变量都转换为全部大写或全部小写。


if (text.toLowerCase().includes(banned[x].toLowerCase())) {

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

}

未经测试,但它应该可以工作。无需使用,search因为无论如何您都不需要索引。使用includes更干净。


查看完整回答
反对 回复 2021-11-04
  • 3 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

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