Username Format Validator – check a handle against platform rules
Every platform publishes its own idea of what a username may look like, and none of them agree. One allows hyphens, another rejects them. One stops at 15 characters, another at 39. One quietly folds your capitals to lowercase, another treats a trailing period as a hard error. This username format validator takes a single candidate handle and reads it through each platform's published rules at once, so you can see where the same string passes and where it does not — and, more usefully, exactly which character caused the failure.
What the checker actually does
Your input is tidied before anything is measured. Surrounding spaces go, a leading @ is dropped, and the result is normalised to Unicode NFC. That last step matters more than it sounds: an accented letter such as é can be stored either as one character or as a plain e followed by a combining acute accent. The two look identical on screen but are different strings to a regular expression and different lengths to a naive counter. Normalising first means a name you typed and the same name you pasted give the same verdict, and the tool tells you when normalisation changed something.
Each platform rule is then applied in three parts: a length range, a character pattern, and any structural rules a pattern cannot express. That third category is where most surprises live — GitHub rejecting two consecutive hyphens, TikTok rejecting a trailing period, YouTube rejecting punctuation at either end. A failure is always reported with the offending character and its position rather than a bare “invalid”.
Counting characters the way a reader does
Lengths here are grapheme clusters, measured with Intl.Segmenter under a pinned locale. A family emoji is one character to a reader, seven code points, and eleven to JavaScript's String.length. Using the wrong one is how a field that looked fine overflows on submission. Case folding is pinned too: under a Turkish locale an ordinary lowercase operation turns I into a dotless ı, which would fail an ASCII-only username that is perfectly valid everywhere else in the world.
The character map
Under the input, the candidate is drawn one cell per character, with the character above and its U+XXXX code point below. Cells are coloured against whichever platform you have focused: allowed, disallowed, allowed but illegal in that position, or flagged as a look-alike. Switching the focused platform recolours the same string without changing it, which is the whole point — one name, re-read through a different rule set. Clicking a flagged cell jumps to the message explaining it.
Look-alike characters
A Cyrillic а and a Latin a are different code points that render identically in most fonts. If your candidate mixes scripts, the tool names the character and its code point as a warning. It is never a pass or fail on its own and never an accusation: plenty of people legitimately write their name in their own script. It simply means you may not be able to retype what you just pasted. The check covers mixed scripts and fullwidth forms, not every possible look-alike pair.
Where the rules come from
Username rules are widely misreported. Each rule here was read from that platform's own documentation domain and carries a source link and the date it was read, so any verdict can be checked in one click. Platforms that do not publish a complete rule were left out rather than filled in from third-party articles — Reddit publishes no username length or character rule at all, and Twitch publishes a length but not a character set.
Privacy and export
Everything runs in your browser. The username is never transmitted, and the page makes no network request of any kind. The only thing stored is which platform toggles you switched on, kept in local storage so the page remembers them. You can copy a plain-text report or export a CSV; cells that begin with a character a spreadsheet would treat as a formula are escaped first, so a name like =cmd stays text when the file is opened.