У меня есть текстовое поле внутри формы.
Перед отправкой формы текстовое поле проверяется и проверяется, чтобы оно не было пустым, а не более 2000 символов, не содержало запрещенных символов и т. Д. …
Я работаю над последней частью проверки, которая требует, чтобы textarea сравнивалась с массивом «плохих слов».
Это поможет мне сохранить и сохранить хороший «язык» на моем сайте.
Я не очень хорошо разбираюсь в js, так кто-нибудь знает способ сравнить каждое слово textarea с массивом плохих слов?
Кроме того, это значительно снизит валидацию? (массив содержит не более 100 слов).
благодаря
Если вы хотите проверить наличие «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)
Имейте в виду, что для полного сохранения слов из вашего приложения вам также потребуется выполнить фильтрацию на стороне сервера.
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 слов в одном регулярном выражении.
Этот код заменяет плохие слова на *****
// 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
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; } }
Вы можете сфокусировать меня, если хотите, но, возможно, просто не сделайте ошибку clbuttic, пытаясь отфильтровать в первую очередь: D