A username is the one text every user writes and every other user sees, and it is where word lists fail worst: a handle has no spaces, no context, and every trick a person can type. This is the check built for it.
Live, on the real engine. Try your own.
ilovesh1t is read as i love sh1t: camelCase, digits and underscores are split, then the handle is segmented against a frequency list, so a word glued to its neighbours still matches.
tihs_xX is checked reversed. Usernames are the one context where a reversed word is worth trying, so it is tried only there.
admin, support, moderator and your own brand come back as the reserved category, so the form can say "that name is taken" rather than "that name is rude".
0.0%
false positives on innocent names and words
Dickinson, Scunthorpe, cockatoo and Sussex are on the innocent list, and each one is a test.
The Scunthorpe Test, rules alone, 15,530 public items, 2026-10-12
0.918
F1, rules alone
Precision and recall in one number: profanity caught, weighed against innocent text wrongly flagged.
The Scunthorpe Test, rules alone, 2026-10-12
A username hook for the stack you already have. Each is a complete file; replace the key.
Or raw HTTP in eight languages, and the MCP server for an agent that adds the hook for you.