在每个空格后标记一个特定的单词

时间:2012-09-21 13:57:31

标签: javascript jquery filter

我试图警告用户是否在textarea中键入了一个不必要的单词。

它只是对某些词语进行了一点验证。

我达到了这样的目的:

var words = "hello";
$("textarea").keyup(function(e){
    var spliting = $("textarea").val().split(" ");
    if(e.keyCode == 32){ // when the user hits space bar
        if($.inArray(words, spliting) != -1){
            $("span").css("background","red");
        }else{
            $("span").css("background","green");
        }
    }
});​

这是最好的方法吗?

如果我需要检查多个单词,如何将变量words迁移为array

Demo

2 个答案:

答案 0 :(得分:2)

要使用数组,您需要遍历其中的每个单词并循环分割数组中的每个单词。但是,您可以在第一场比赛中返回:

var words = ["hello","goodbye"];
$("textarea").keyup(function(e){

        var spliting = $("textarea").val().split(" ");

        for (var i=0; i<words.length; i++) {
          if($.inArray(words[i], spliting) != -1){
              $("span").css("background","red");
              // break on first match since there is no need to continue looping
              // if it is already red.
              break;
          }else{
              $("span").css("background","green");
          }
        }
});​

我删除了空格检查。即使它使函数更有效,但是当有人回到正确的拼写并最终得到无效的单词时,你需要警惕。你拥有它的方式,除非稍后输入空格,否则这些情况永远不会导致标记的单词被找到。

建议您为onchangeblur事件调用此函数,因为输入不是用户将输入输入表单输入的唯一方式。

Here is the updated demo

答案 1 :(得分:1)

每按一次键,您不需要.split输入,这是首选正则表达式的情况:

<强> Check the updated fiddle

基于数组生成表达式:

var blackList = ['hello','world'];
var expression = new RegExp('\\b(' + blackList.join('|') + ')\\b','i');

$("textarea").keyup(function(e)
{
  //if (e.keyCode === 32)
  //{in comment after reading the answer posted by Michael Berkowski
        if ($(this).val().match(expression))
        {
            $("span").css("background","red");
            return;
        }
        $("span").css("background","green");
  //}
});​