0

如果用户在文本区域中键入了不需要的单词,我会尝试警告用户。

它只是对某些单词的一点验证。

我做了这样的事情:

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为 a ?array

演示

4

2 回答 2

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因为键入不是用户将输入输入到表单输入的唯一方式。

这是更新的演示

于 2012-09-21T14:02:35.450 回答
1

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

检查更新的小提琴

要基于数组生成表达式:

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");
  //}
});​
于 2012-09-21T14:06:00.267 回答