Regex pseudo Twitch
Twitch ne publie aucun document unique réunissant toutes les règles de pseudo : la longueur minimale de 4 caractères vient d'une page d'aide officielle, le reste (caractères autorisés, underscore interdit en tête) se dégage de discussions sur le propre forum développeur de Twitch, où un employé demande lui-même « can someone confirm? » sur cette règle en 2014. Une bibliothèque npm réelle utilisée pour intégrer des lecteurs vidéo Twitch confirme d'ailleurs un vrai bug en production : sa regex n'accepte que les minuscules, alors que Twitch n'est pas sensible à la casse — « twitch.tv/Myth » échouait quand « twitch.tv/myth » fonctionnait. Voici un motif qui corrige ce point, comparé à ce cas et deux tentatives du forum développeur Twitch lui-même.
/^[a-zA-Z0-9][a-zA-Z0-9_]{3,24}$/Comparatif des patterns existants
| Source | pattern | Score sur le 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 | sûr |
| 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 | sûr |
| 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 | sûr |
Implémentation
const re = new RegExp("^[a-zA-Z0-9][a-zA-Z0-9_]{3,24}$", "");
re.test(input);Limites
- 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.