Regex nom d'utilisateur Mastodon
Sur Mastodon, un compte local a un nom d'utilisateur de 1 à 30 caractères parmi les lettres, chiffres et le tiret bas, sans distinction de casse (code source : modèle Account). Pour les comptes distants, le même modèle accepte aussi des points et des tirets à l'intérieur du nom. Les tentatives relues le reflètent : le motif USERNAME_ONLY_RE de Mastodon (comptes distants) accepte « alice.smith » et « a-b », la règle des comptes locaux n'a pas de borne de longueur dans la regex (la limite de 30 est une validation séparée), et Maigret, qui sonde mastodon.social, reprend « [a-zA-Z0-9_]+ » sans borne. Voici un motif qui applique la règle locale et sa limite de 30 caractères, comparé à ces tentatives.
/^[a-z0-9_]{1,30}$/ipasse 26/26 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| Mastodon USERNAME_ONLY_RE (comptes distants) — accepte points et tirets intérieurs (« alice.smith », « a-b ») et toute longueur | ^[a-z0-9_]+([.-]+[a-z0-9_]+)*$ | 22 / 26 | sûr |
| Mastodon, règle des comptes locaux — bon jeu de caractères mais longueur non bornée dans la regex (31 caractères et plus passent) | ^[a-z0-9_]+$ | 25 / 26 | sûr |
| Maigret (mastodon.social) — même jeu de caractères, aucune borne de longueur, sans distinction de casse seulement par la classe | ^[a-zA-Z0-9_]+$ | 25 / 26 | sûr |
Implémentation
const re = new RegExp("^[a-z0-9_]{1,30}$", "i");
re.test(input);Limites
- Valide seulement la forme d'un nom d'utilisateur LOCAL (sans domaine). Les comptes distants (« alice.smith@autre.instance ») suivent une règle plus large, et l'adresse complète « @nom@domaine » n'est pas couverte (voir la fiche domain-name pour la partie domaine).
- Les noms réservés (admin, root, etc.) et l'unicité sont contrôlés par le serveur, pas par la regex ; chaque instance peut être configurée avec une règle différente (plugins, versions anciennes). La règle vient du code source de Mastodon, pas d'une spécification publiée.
- La casse n'est pas significative sur Mastodon : « Alice » et « alice » désignent le même compte. Normalisez en minuscules avant de comparer.