2

私の配列には文字列値があります:

var bannedWords = ["cat","dog","test"]

テキスト入力フィールドは、値に配列の単語が含まれているかどうかを確認します。

var title = $j('#edit-content').val()
if ($j.inArray(title, bannedWords) != -1) { alert("it's inside the array") }

値が「cat」の場合、期待どおりに動作します。値が「猫は黒」の場合、入力値に「猫」が入っているのでアラートが欲しい。

うまくいかない理由はわかりましたが、どうすればいいのですか?値にある種のループがありますか?

前もって感謝します!

4

4 に答える 4

3

配列から正規表現を作成し、それを使用して入力をテストできます。

// The 'i' flag matches values regardless of case.
var regex = new RegExp('\\b' + bannedWords.join("\\b|\\b") + '\\b', 'i');

// Regex would equal /\bcat\b|\bdog\b|\btest\b/i
var valid = !regex.test($("#edit-content").val());

例: http://jsfiddle.net/aZbWP/1

于 2013-01-09T17:24:52.280 に答える
2

値を配列に分割して、各単語を個別にテストする必要があります。

var words = $j('#edit-content').val().split(' ');
$.each(words, function(index, word) {
    if ($j.inArray(word, bannedWords) != -1) { 
        alert('it\'s inside the array') 
    }
});

フィドルの例

于 2013-01-09T17:18:57.287 に答える
1

ループを使用して以下を確認できます。

function in_string(words, string) {
    for (var i = 0; i < words.length; i++) {
        if (string.indexOf(words[i]) !== -1) {
            return true;
        }
    }

    return false;
}

var valid = in_string(bannedWords, $j('#edit-content').val())

これをサーバー側で行うことをお勧めしますが。リクエストを手動で送信して JS 検証をバイパスすることは難しくありません。

于 2013-01-09T17:19:11.233 に答える
0

bannedWords 配列で正規表現を使用すると、より強力になり (たとえば、'cat'、'Cat'、'CAT' をすべて一度にチェックできます)、必要なことをより簡潔に行うことができます。

例: http://jsfiddle.net/PS9FG/1

このコードを自分のコード (たとえば、持っている jQuery の行) に合わせて少し変更する必要があります。

var bannedWords = [
  /cat/i,    // the i after each expression means case-insensitive
  /dog/i,
  /test/i
];


document.getElementById('checkBtn').onclick = function() {
    var bWrd = bannedWords.length;
    while (bWrd) {    // loop through each pattern in the array
        bWrd -= 1;
        if (document.getElementById('edit-content').value.match(bannedWords[bWrd])) {
            alert("it's inside the array");
        }
    }
};

しかし、うまくいけば、それがどのように機能するかについてのアイデアが得られます.

于 2013-01-09T17:32:28.477 に答える