There is no perfect solution, as the kiddies will always
find ways around them. Let's face it, if it takes you 10
hours to think up something, it may take them 1000 hours
to figure out a way around it, but if there's 10,000
people banging away at it, then it's over in 6 minutes.
Think of the problems you have with:
shittake mushrooms,
Fucking, Austria,
"I s
craped my knee", hockey players named Satan, and so many more that it makes
conversation quite awkward.
If you want to do the "right" thing, then make sure you
match on word-breaks (i.e. /\bcrap\b/) and that your
list is fairly extensive. Even then, the context often
determines the meaning of words.