IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Enlever tous les caractères spécifiques d'une chaîne (accent, espaces etc)


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 43
    Par défaut Enlever tous les caractères spécifiques d'une chaîne (accent, espaces etc)
    Bonjour,

    J'ai besoin de simplifier une chaîne de caractère en enlevant tous les caractères autres que les lettres de l'alphabet de base et les chiffres (en gardant éventuellement les tirets et underscores mais ce n'est pas obligatoire).

    J'avais pensé au début à une fonction type replace, en mettant tous les accents, les caractères spéciaux etc ... mais les utilisateurs vont peut-être faire des copier/coller depuis word ou autre avec les caractères spéciaux qui vont avec ... (ex : les apostrophes qui ne sont pas des ')

    Du coup, existe-t-il une fonction pour supprimer tous les caractères "non standard" ?
    Je peux faire un replace pour les accents par exemple mais je voudrais ensuite remplacer tout le reste par "".

    Je ne trouve pas de fonction native pour ça. Il y a toujours la solution de boucler sur tous les caractères et dire si ce caractères n'est pas une lettre, replacer par "" mais il y a peut-être une fonction plus performante)

    Merci d'avance.

  2. #2
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    as-tu pensé aux expressions régulières ? Avec un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    string txt = "avèç dës ch@r    -pourris_123";
    string pattern = @"[^0-9a-zA-Z]";
    Regex rex = new Regex(pattern);
    string result = rex.Replace(txt, "");
    MessageBox.Show("avant : " + txt + "\r\naprès : " + result);
    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    avant : avèç dës ch@r    -pourris_123
    après : avdschrpourris123
    A faire à ta façon, les regexp c'est pas vraiment mon truc.

  3. #3
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 661
    Par défaut
    Bonjour,

    au lieu de vouloir enlever tous les caractères indésirables et du coup, comme tu dis, en louper certains. Il est beaucoup simple et sûr de n'autoriser que les caractères voulus :

    Tu as plusieurs choix :

    Soit tu rempli un tableau avec les caractères / chiffres que tu veux, et tu fais la comparaison.

    Soit tu utilises une regex, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string regex = @"^[a-zA-Z0-9\_\-]+$"; // N'autorise que les lettres de l'alphabet et les chiffres, ainsi que '-' et '_'
    Un petit aperçu des regex si tu ne connais pas : Lien

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 43
    Par défaut
    Merci pour vos retours, je n'y avais pas pensé effectivement.

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Ceci répond à ton besoin des caractères spéciaux mais apparemment pas celui des accents.
    Pour remplacer les accents (diacritique) par leurs caractères correspondant je te propose cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
            public string StringReplaceDiacritics(string text)
            {
                if (string.IsNullOrWhiteSpace(text))
                    return text;
     
                String normalizedString = text.Normalize(NormalizationForm.FormD);
                StringBuilder stringBuilder = new StringBuilder();
     
                for (int i = 0; i < normalizedString.Length; i++)
                {
                    Char c = normalizedString[i];
                    if (CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
                        stringBuilder.Append(c);
                }
     
                return stringBuilder.ToString();
            }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 22/10/2012, 12h08
  2. [RegEx] remplacer tous les caractères accentués d'une chaine
    Par Alexdezark dans le forum Langage
    Réponses: 6
    Dernier message: 13/11/2009, 12h47
  3. Réponses: 2
    Dernier message: 08/07/2008, 11h50
  4. Réponses: 13
    Dernier message: 09/01/2008, 01h32
  5. Réponses: 6
    Dernier message: 05/10/2007, 09h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo