将变量中的单词附加到另一个变量中的单词

时间:2015-04-06 16:45:32

标签: javascript jquery

我需要实现类似下面的代码,如果用户输入了例如(you are bad),它会显示警告。以下代码无法正常工作,因为它只会在不读取badAppend中的内容时提醒单词(you are)。

var badAppend= ["freak", "ugly", "bad"]
var badWords = [("you are"+badAppend)];
if((badWords)
    {
       alert("you cannot use this word/sentence");
       return false;
    }

我正在努力避免这样做,以避免像下面这样做:

var badWords = ["you are bad", 'you are ugly", "you are freak"];

等。

如果有人能帮助我,我会非常感激。问候。

4 个答案:

答案 0 :(得分:1)

var newWords = $(badAppend).map(function(item) { return "you are " + item; });

这会给你

newWords = [ "you are freak", "you are ugly", "you are bad" ];

答案 1 :(得分:1)

一种更为香草的JavaScript方式,在这个方面,你首先对一组“坏词”进行“黑名单”检查,只打印允许的句子:

var words = document.getElementById('userInput').value.split(" ");
var badWords = ['array', 'of', 'bad', 'words'];
for (i = 0; i < words.length; i++) {
    for (ii = 0; ii < badWords.length; ii++) {
        var exists = words.indexOf(badWords[ii]);
        if (exists != -1) {
            words.splice(exists, 1);
        }
    }
    var result = document.getElementById('notInside');
    result.innerHTML += words[i];
    result.innerHTML += "</br>";
}

我知道他正在使用jQuery,但作为另一个例子,可以为其他可能需要它的人做这件事。如果您只需要显示数组中的ARE,请执行以下操作:

var words = document.getElementById('userInput').value.split(" ");
var badWords = ['array', 'of', 'bad', 'words'];
for (ii = 0; ii < badWords.length; ii++) {
    var exists = words.indexOf(badWords[ii]);
    if (exists > -1) {
        var result = document.getElementById('inside');
        result.innerHTML += words[exists];
        result.innerHTML += "</br>";
    }
}

答案 2 :(得分:1)

我会做这样的事情,

var match = $('div.text').text().match(/[yY]ou(('re)|(\sare))\s\w+/g);

if(match){
    match = match.map(function(item){
        return (item.substring(item.lastIndexOf(" ")+1)).toLowerCase();
    });

    var match2 = $(match).filter(badWordsArray);

    if(match2.length > 0){
        console.log('Bad word!');
    }else{
        console.log('Input is clean!');
    }

}else{
    console.log('Input is clean!');
}    

将第一行中的文本选择器更改为您需要的任何内容。

这将浏览用户输入的所有文字,匹配其中一个后面的所有单词:

  • 你是
  • 您&#39;重
  • 你是
  • 你是

match变量将是一个包含所有这些单词的数组,然后您可以根据错误的单词数组对其进行过滤,看看是否有任何不良单词。

如果没有那四个&#34;你在代码中它只是记录输入是干净的,否则它会检查小写的坏词。

如果您确定只需要完全匹配'you are',那么可以用这个替换正则表达式,它也会运行得更快。 /(you\sare)\s\w+/g

答案 3 :(得分:1)

根据我的理解,你有一个坏词词典,你试图阻止用户使用这些词。在这种情况下,您可以执行以下操作:

var containsBadWords = function(words){
    var badWords = ['bad', 'ugly', 'freak' /* ...*/];
    var badWordCount = 0;
    words.forEach(function(word){
        if(badWords.indexOf(word)>-1) badWordCount++;
    });
    return badWordCount;
}

var userWords = 'i am bad you are bad';    
var result = containsBadWords(userWords.split(' '));    
if(result>0) alert();