# Point d'exclamation et caractères spéciaux dans les noms d'utilisateur

**URL:** <https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521>\
**Category:** Migration\
**Created:** [Décembre 2, 2022, 4:47 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521 "2022-12-02T16:47:29Z")\
**Posts on this page:** 1\
**Showing post:** 26

<div class="post-metadata">

**Author:** ![Crius](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/crius/32/317214_2.png) [@Crius](https://meta.discourse.org/u/Crius)\
**Post date:** [Avril 22, 2024, 2:38 UTC](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521/26 "2024-04-22T14:38:14Z")

</div>

Malheureusement, nous avons dû créer nous-mêmes notre script de migration complet. Le script disponible à l’époque (fin 2022) n’était absolument pas dans un état “fini”. Des morceaux de code référencés manquaient et d’autres n’avaient aucun sens.

Parmi les parties que nous avons dû gérer, il y avait le renommage des noms d’utilisateur qui ne respectaient pas la norme discourse. Nous avions plus de 10 000 utilisateurs, nous avons donc simplement attribué le nom d’utilisateur au champ “nom d’utilisateur” qui n’a pas de telles restrictions et lorsqu’un nom d’utilisateur enfreignait l’une des règles, nous l’avons remplacé par la chaîne md5 du nom d’utilisateur. Ensuite, nous avons laissé aux utilisateurs 1 mois pour changer librement leur nom d’utilisateur afin qu’ils puissent le remplacer par quelque chose qui ressemble à leur nom d’origine.

Voici un extrait du code :

```plaintext
    public static string ParseName(string text)
    {
        var reservedName = new string[] { "user", "system", "moderators" };
        var result = NormalizeText(text);

        // If reserved change it
        if (reservedName.Contains(result, StringComparer.OrdinalIgnoreCase))
            result = text.ToLower().ToMD5();

        // Invalid alphanumeric
        else if (!Regex.IsMatch(result, @\"^[a-zA-Z0-9_.-]*$\"))
            result = text.ToLower().ToMD5();

        // Invalid repeated
        else if (Regex.IsMatch(result, @\"[-_.]{2,}\"))
            result = text.ToLower().ToMD5();

        // Invalid trailing char
        else if (Regex.IsMatch(result, @\"/[\\p{L}\\p{N}]+$\"))
            result = text.ToLower().ToMD5();

        // Confusing extensions
        else if (Regex.IsMatch(result, @\"/\\.(js|json|css|htm|html|xml|jpg|jpeg|png|gif|bmp|ico|tif|tiff|woff)$/i\"))
            result = text.ToLower().ToMD5();

        // Starting and ending dots
        else if (result.StartsWith(".") || result.EndsWith("."))
            result = text.ToLower().ToMD5();

        // No more than 60 character
        result = result.Truncate(60);

        return result;
    }

```

Nous avons utilisé ce fichier comme référence pour déterminer ce qui devait être considéré comme une restriction. Il a peut-être été modifié entre-temps, alors gardez un œil dessus.

> <https://github.com/discourse/discourse/blob/main/app/models/username_validator.rb>

---

_[View the full topic](https://meta.discourse.org/t/exclamation-mark-and-special-characters-in-usernames/247521)._
