Regex pseudo Minecraft (Java Edition)
Un pseudo Minecraft Java Edition, ce n'est pas juste « des lettres, chiffres et underscore » : Mojang impose une longueur minimale de 3 caractères, une règle qu'une bibliothèque Go pourtant utilisée en production (minotar, l'API de skins) ignore en acceptant un seul caractère. Un dépôt GitHub va plus loin avec un bug d'ancrage classique : une alternance sans parenthèses fait que le « ^ » et le « $ » ne portent chacun que sur une seule branche, laissant passer des chaînes bien plus longues que prévu. Voici un motif qui respecte la vraie plage 3-16, comparé à ces trois tentatives.
/^[A-Za-z0-9_]{3,16}$/passe 22/22 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| minotar/minecraft (bibliothèque Go de l'API de skins minotar.net, en production) — minimum 1 caractère au lieu de 3 | [a-zA-Z0-9_]{1,16} | 8 / 22 | sûr |
| Forum technique BetterPHP (2012) — minimum 2 caractères au lieu de 3 | [A-Za-z0-9_]{2,16} | 9 / 22 | sûr |
| GitHub XPPlugins/CnUsername — alternance sans parenthèses : « ^ » ne porte que sur la première branche et « $ » que sur la seconde, laissant passer des chaînes bien plus longues que prévu | ^[a-zA-Z0-9_]{3,16}|[a-zA-Z0-9_一-龥]{2,10}$ | 9 / 22 | sûr |
Implémentation
const re = new RegExp("^[A-Za-z0-9_]{3,16}$", "");
re.test(input);Limites
- Valide seulement la FORME (3-16 caractères parmi lettres/chiffres/underscore) : ne consulte pas l'API Mojang (sessionserver.mojang.com) pour confirmer qu'un pseudo est réellement attribué et actif.
- N'impose pas les restrictions de contenu de Mojang (pseudos offensants ou trompeurs interdits, indépendamment de la forme) : un pseudo syntaxiquement valide peut malgré tout être refusé à la création par Mojang pour des raisons de modération.
- Ne couvre que le Java Edition : le Bedrock Edition (consoles, mobile) utilise un Gamertag Xbox partagé entre plateformes, avec ses propres règles de longueur et de caractères.
- Ne reflète pas l'historique des changements de pseudo : Mojang limite à un changement tous les 30 jours et conserve l'historique des anciens pseudos, deux règles qu'une regex sur une seule chaîne ne peut pas exprimer.