What it does
A profanity filter tester runs a word list against sample text and shows each match. This one also catches common dodges (look-alike characters like cr4p, stretched letters like daaamn, spaced letters like s.t.u.p.i.d), supports prefixes and regular expressions, and lets you keep an allow list for words that should never be flagged.
How do you use the filter tester?
Paste your list on the left, words that must never be flagged on the right, and real text underneath; the results update as you type.
- Put one entry per line in the block list. Mix plain words, phrases, prefixes like
scam*and regular expressions like/\bd+m+\s*m+e+\b/. - Add exceptions to the allow list. If "class" is blocked but you run a school account, add "classic", "classroom" and so on.
- Paste replies from your mentions or comment queue into Text to test. Real text beats invented examples, because real abuse is creative.
- Turn the catch tricks options on and off to see how much each one adds.
- Copy the masked version if you need a family-friendly quote, or download the list as a text file.
What tricks does it catch?
It catches the three dodges people use most: swapping in look-alike characters, stretching letters and spacing letters out.
| Trick | Example | How the tester handles it |
|---|---|---|
| Look-alike characters | cr4p, id1ot, cl@ss, $cam | Each letter also matches its common substitutes (a: 4 @, e: 3, i: 1 !, o: 0, s: 5 $, t: 7 +) and Cyrillic look-alikes |
| Stretched letters | daaaamn, nooooo | Each letter may repeat |
| Spaced-out letters | s.t.u.p.i.d, s p a m | Up to two separator characters are allowed between letters |
| Accents | idiöt, stüpid | Accents are ignored before matching |
| Case | FREE FOLLOWERS | Matching ignores case |
Word boundaries still apply to all of these, so "as such" never matches a list entry of "ass".
Why test a list before using it?
Because an untested list fails in both directions: it blocks harmless posts and misses abuse that was only lightly disguised.
The classic example is the town of Scunthorpe in England, whose residents had trouble signing up for services in the 1990s because the name contains a rude word. The same thing happens on social walls today. A list with "hell" in it hides a fan writing "hello", and a list built only from exact words lets "f r e e f o l l o w e r s" straight through.
A tester shows both kinds of mistake side by side. If a change to your list fixes a miss but adds three false positives, you'll see it right away.
What should go on a block list?
Start with the words and phrases that actually showed up in your queue, then add the obvious variations.
- Slurs and abuse that would never be acceptable on your account, whatever the context.
- Spam phrases you see over and over: "free followers", "check my bio", "DM for promo".
- Scam vocabulary: "seed phrase", "connect your wallet", "account will be suspended".
- Your own risk words: a competitor's name during a launch, a spoiler during a live event.
Keep context-dependent words (like "kill", which shows up in "killed it on stage") off the reject list. Put them on a hold list in the rule builder so a person looks at them.
Where can I use the finished list?
Anywhere that accepts a plain list: X muted words, WordPress comment settings, most social wall tools, and chat moderation bots.
X's muted words take one word or phrase at a time, so short lists work best there. WordPress takes one entry per line in its discussion settings. Our guide to building a blocklist that doesn't backfire covers each destination.
Common questions
Why does my filter flag innocent words?
Usually because it matches inside longer words. A list entry like "ass" catches "class", "passport" and "Massachusetts" if the filter doesn't respect word boundaries. Leave "Match inside longer words" off, and put words you keep seeing wrongly flagged on the allow list.
Does the tester come with a full profanity list?
No. The example list is short and mild on purpose. Lists depend on your audience, language and brand, so start from your own moderation history and add entries as you see real abuse.
Which list format does it accept?
One entry per line. A plain word matches that whole word, a phrase matches with any amount of space between words, word* matches anything starting with word, *word matches anything ending with it, and /pattern/ is a JavaScript regular expression. Lines starting with
Is my list saved?
Your block and allow lists are kept in your own browser's local storage so they're still there next visit. They are never uploaded. Clear your browser's site data to remove them.