Сравните массив слов для ввода текстовой области с помощью JavaScript - PullRequest
1 голос
/ 16 августа 2010

У меня есть текстовая область внутри формы.

Перед отправкой формы текстовая область проверяется и проверяется, поэтому она не пустая, не более 2000 символов, не содержит запрещенных символов и т. Д. *

Я работаю над последней частью проверки, которая потребует, чтобы текстовая область сравнивалась с массивом «плохих слов».

Это поможет мне поддерживать и поддерживать хороший «язык»на моем сайте.

Я не очень хорошо разбираюсь в js, так кто-нибудь знает способ сравнить каждое слово текстовой области с массивом плохих слов?

Кроме того, это сильно замедлит валидацию?(массив содержит не более 100 слов).

Спасибо

Ответы [ 5 ]

1 голос
/ 16 августа 2010
var bad_words = new Array('word1', 'word2');
var user_words = document.getElementById('textarea').split(/\W+/);

for( var i in bad_words)
{
  if( user_words.indexOf( bad_words[i] ) != -1 )
  {
    alert( 'The textarea has bad word!');
    break;
  }
}
1 голос
/ 16 августа 2010
var bad_words = ['stupid', 'dang']; // watered down
for (var i = 0; i <= bad_words.length; i++) {
    if (document.getElementById('my_textarea').value.match(bad_words[i])) {
        // has bad word!
    }
}

Это сделает ваш код немного аккуратнее, потому что вам не нужно иметь 100 слов в одном совпадении с регулярным выражением.

1 голос
/ 16 августа 2010

Этот код заменяет плохие слова на *****

// creating regex
var words = ['bad', 'words'];
var wordsStr = "";
for(var i=0; i<words.length; i++) {
    wordsStr += words[i];
    if (i < words.length -1) {
        wordsStr += "|";
    }
}
// wordsStr is "bad|words"
var regex = new RegExp(wordsStr, "gi"); // g: replace all; i:insensitive

// replacing
var text = "I cant say bad words!";
text = text.replace(regex, "****");
// text is "I cant say **** ****!"

См. В jsfiddle

1 голос
/ 16 августа 2010

Если вы хотите проверить наличие «expletive1» и «expletive2», вы должны сделать следующее:

my_textarea = document.getElementById('textarea_id');

if (/\b(?=\w)(expletive1|expletive2)\b(?!\w)/i.test(my_textarea.value)) {
    // we found bad words!  do something
} else {
    // no bad words found, carry on, nothing to see here
}

И вы просто добавите больше слов в список таким же образом (expletive1 | expletive2 | expletive3 | expletive4)

Имейте в виду, что для полного исключения слов из вашего приложения вам также потребуется выполнить фильтрацию на стороне сервера.

0 голосов
/ 30 декабря 2010

Вы можете понизить меня, если хотите, но, возможно, просто не совершите грубую ошибку , пытаясь фильтровать в первую очередь: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...