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

当涉及大写字母时,JavaScript不删除文本,javascript,html,regex,string,Javascript,Html,Regex,String,所以我在我的网站上有一个文本框,我对它进行了编码,以防止某些单词被使用 window.onload=function(){ 禁止变量=['MMM','XXX']; document.getElementById('input_1_17')。addEventListener('keyup',函数(e){ var text=document.getElementById('input_1_17')。值; 对于(变量x=0;x

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

window.onload=function(){
禁止变量=['MMM','XXX'];
document.getElementById('input_1_17')。addEventListener('keyup',函数(e){
var text=document.getElementById('input_1_17')。值;
对于(变量x=0;x<0.length;x++){
如果(text.toLowerCase().search(禁止[x])!=-1){
警报(禁止[x]+“不允许!”);
}
var regExp=新的regExp(禁止[x]);
text=text.replace(regExp',);
}
document.getElementById('input_1_17')。value=text;
},假);
}

当所有输入的字母都是小写时,该代码可以完美地工作并从文本框中删除文本。问题是,当文本包含大写字母时,它会给出错误,但该单词不会从文本框中删除。

您似乎一直在期待一些不合理的东西。小写字符串永远不会与包含大写字母的字符串匹配


将两者转换为比较或使用小写禁止字符串。前者更可靠,避免了未来的人为错误

实际上,您可以将这两个变量转换为全部大写或全部小写

if (text.toLowerCase().includes(banned[x].toLowerCase())) {
  alert(banned[x] + ' is not allowed!');
}
没有测试,但它应该工作。无需使用
搜索
,因为您根本不需要索引。使用
includes
更干净

这是一个很好的方向,只是您需要一些标志(使其大小写-
i
n敏感,以及
g
lobal-因此替换所有出现的情况):

var text=“在xxx下\n在xxx下\n它是MMM\n它是MMM\n它是MMM\n从我这里得到的”;
控制台日志(“淫秽:”,文本);
var=[“XXX”,“MMM”];
禁止。forEach(肮脏=>{
text=text.replace(新的RegExp(nastines,“gi”),“”);
});

日志(“好的:”,文本)通常,在比较
字符串时,应使用
.toLowerCase()
两侧,以便在逻辑上匹配它们

但问题实际上来自您正在使用的正则表达式,您忽略了大小写敏感度,您只需要在其中添加

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


另外请注意,不建议在循环中使用
alert()
,您可以更改逻辑,只在一个
alert()

中提醒所有匹配的项。我怀疑将文本转换为小写永远不会匹配所有大写值。@DaveNewton您是正确的。另一个疏忽。有什么建议吗?通常你应该全部用小写字母,
text.toLowerCase().search(禁止[x].toLowerCase())
。两者都转换吗?这看起来并不太复杂,但也许我遗漏了一些东西,你不能在创建RegExp时添加'ignore case'标志,即
newregexp(禁用[x],'I')
,以使替换工作正常吗?