I am building a very basic profanity filter that I only want to apply on some fields on my application (fullName, userDescription) on the serverside.
Does anyone have experience with a profanity filter in production? I only want it to:
'ass hello' <- match
'asster' <- NOT match
Below is my current code but it returns true and false on in succession for some reason.
var badWords = [ 'ass', 'whore', 'slut' ]
, check = new Regexp(badWords.join('|'), 'gi');
function filterString(string) {
return check.test(string);
}
filterString('ass'); // Returns true / false in succession.
How can I fix this “in succession” bug?
The
testmethod sets thelastIndexproperty of the regex to the current matched position, so that further invocations will match further occurrences (if there were any).So, you will need to reset it manually in your
filterStringfunction if you don’t recreate the RegExp each time:Btw, to match only full words (like “ass”, but not “asster”), you should wrap your matches in word boundaries like WTK suggested, i.e.