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を として移行するにはどうすればよいですか?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");
          }
        }
});​

スペースのチェックを外しました。これにより関数がより効率的になりますが、誰かが正しいスペルに戻って無効な単語になってしまうケースに注意する必要があります。あなたが持っていた方法では、後でスペースが入力されない限り、これらのケースではフラグ付きの単語が検出されることはありません.

ユーザーがフォーム入力に入力する唯一の方法はタイピングだけではないため、この関数をonchangeandイベントに対しても呼び出すことをお勧めします。blur

更新されたデモはこちら

于 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 に答える