Comparer un tableau de mots à une entrée textarea avec javascript

J'ai une zone de texte dans un formulaire.

Avant que le formulaire ne soit soumis, la zone de texte est validée et vérifiée afin qu'elle ne soit pas vide, ne dépasse pas 2000 caractères, ne contient pas de caractères interdits, etc.

Je travaille sur la dernière partie de la validation, qui nécessiterait que la zone de texte soit comparée à une série de «mauvais mots».

Ceci pour m'aider à maintenir et garder une bonne «langue» sur mon site.

Je ne suis pas très bon sur js, de même que quelqu'un sait d'une manière de comparer chaque mot de la zone de texte à l'éventail de mauvais mots?

De plus, cela ralentirait-il beaucoup la validation? (Le tableau contient au plus 100 mots).

Merci

Si vous vouliez vérifier la présence de "expletive1" et "expletive2", vous feriez les opérations suivantes:

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 } 

Et vous devriez simplement ajouter plus de mots à la liste de la même manière (expletive1 | expletive2 | expletive3 | expletive4)

Gardez à l'esprit que pour garder les mots hors de votre application entièrement, vous devrez également effectuer un filtrage côté serveur.

 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! } } 

Cela permettra de garder votre code un peu plus propre, car vous ne devez pas avoir 100 mots dans une seule correspondance regex.

Ce code remplace les mauvais mots par *****

 // 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 **** ****!" 

Voir dans 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; } } 

Vous pouvez me réduire si vous voulez, mais peut-être ne faites-vous pas l' erreur de cliqueter d'essayer de filtrer en premier lieu: D