Regex Twitch username
Twitch publishes no single document gathering all username rules: the 4-character minimum comes from an official help page, the rest (allowed characters, no leading underscore) emerges from Twitch's own developer forum discussions, where an employee asks "can someone confirm?" about that very rule back in 2014. A real npm library used to embed Twitch video players confirms an actual production bug: its regex only accepts lowercase, even though Twitch usernames are case-insensitive - "twitch.tv/Myth" failed while "twitch.tv/myth" worked. Here's a pattern fixing that, compared against that case and two attempts from Twitch's own developer forum.
/^[a-zA-Z0-9][a-zA-Z0-9_]{3,24}$/passes 20/20 cases
Comparison of existing patterns
| Source | pattern | Score on the corpus | ReDoS |
|---|---|---|---|
| Forum développeur Twitch officiel (2014) — longueur décalée d'une unité dans les deux sens (3-24 au lieu de 4-25), n'interdit pas l'underscore en tête ; l'auteur lui-même demande confirmation sur ce point dans son propre message | [\w]{3,24}$ | 11 / 20 | safe |
| Forum développeur Twitch officiel (2015) — inclut un « # » optionnel hérité de la syntaxe IRC qui n'appartient pas au pseudo lui-même | ^(#)?[a-zA-Z0-9][\w]{2,24}$ | 18 / 20 | safe |
| react-player (bibliothèque npm réelle) — n'accepte que les minuscules ; bug confirmé en production dans une issue GitHub réelle : « twitch.tv/Myth » échouait alors que Twitch n'est pas sensible à la casse | (?:www\.|go\.)?twitch\.tv/([a-z0-9_]+)($|\?) | 12 / 20 | safe |
Implementation
const re = new RegExp("^[a-zA-Z0-9][a-zA-Z0-9_]{3,24}$", "");
re.test(input);Limits
- Repose en partie sur des règles non publiées dans un document officiel unique (seule la longueur minimale de 4 caractères est confirmée par une page d'aide Twitch) : le reste vient de discussions du forum développeur et d'observations tierces, à traiter avec la prudence que ça mérite plutôt que comme une norme figée.
- Ne consulte pas l'API Twitch (Get Users) pour confirmer qu'un pseudo est réellement attribué et actif : un pseudo syntaxiquement valide selon ce motif peut être libre, suspendu, ou n'avoir jamais existé.
- Twitch n'étant pas sensible à la casse, ce motif accepte indifféremment majuscules et minuscules — contrairement à au moins une bibliothèque réelle comparée ici, qui n'accepte que les minuscules et casse une partie réelle des intégrations en production.
- N'impose aucune restriction de contenu (pseudos trompeurs ou offensants interdits par la politique Twitch, indépendamment de la forme) : un pseudo syntaxiquement valide selon ce motif peut malgré tout être refusé à la création ou suspendu après coup.