139 votes

Comment mettre en majuscules la première lettre du prénom et du nom en C# ?

Existe-t-il un moyen simple de mettre en majuscule la première lettre d'une chaîne de caractères et de baisser le reste ? Existe-t-il une méthode intégrée ou dois-je en créer une moi-même ?

257voto

ageektrapped Points 7815

Utilisez System.Globalization.TextInfo.ToTitleCase() qui met en majuscules tous les mots de la chaîne :

string text = "john doe";
string result = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(text);
// Produces "John Doe"

Voir aussi Lien MSDN pour une description détaillée.

118voto

Nathan Baulch Points 7994
CultureInfo.CurrentCulture.TextInfo.ToTitleCase("hello world");

30voto

String test = "HELLO HOW ARE YOU";
string s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(test);

Le code ci-dessus ne fonctionne pas .....

donc mettez le code ci-dessous en convertissant en inférieur puis appliquez la fonction

String test = "HELLO HOW ARE YOU";
string s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(test.ToLower());

14voto

polkduran Points 1583

Il y a des cas où CultureInfo.CurrentCulture.TextInfo.ToTitleCase ne peut pas gérer, par exemple : l'apostrophe ' .

string input = CultureInfo.CurrentCulture.TextInfo.ToTitleCase("o'reilly, m'grego, d'angelo");
// input = O'reilly, M'grego, D'angelo

A regex peut également être utilisé \b[a-zA-Z] pour identifier le caractère de départ d'un mot après une limite de mot \b il suffit alors de remplacer la correspondance par son équivalence en majuscules grâce à la fonction Regex.Replace(string input,string pattern,MatchEvaluator evaluator) méthode :

string input = "o'reilly, m'grego, d'angelo";
input = Regex.Replace(input.ToLower(), @"\b[a-zA-Z]", m => m.Value.ToUpper());
// input = O'Reilly, M'Grego, D'Angelo

El regex peut être ajusté si nécessaire, par exemple, si nous voulons gérer les MacDonald y McFry Dans ce cas, la regex devient : (?<=\b(?:mc|mac)?)[a-zA-Z]

string input = "o'reilly, m'grego, d'angelo, macdonald's, mcfry";
input = Regex.Replace(input.ToLower(), @"(?<=\b(?:mc|mac)?)[a-zA-Z]", m => m.Value.ToUpper());
// input = O'Reilly, M'Grego, D'Angelo, MacDonald'S, McFry

Si nous devons gérer plus de préfixes, il suffit de modifier le groupe (?:mc|mac) par exemple pour ajouter des préfixes français du, de : (?:mc|mac|du|de) .

Enfin, on peut se rendre compte que cette regex correspondra également au cas MacDonald'S pour le dernier 's Nous devons donc le gérer dans le regex avec un regard négatif derrière (?<!'s\b) . A la fin, nous avons :

string input = "o'reilly, m'grego, d'angelo, macdonald's, mcfry";
input = Regex.Replace(input.ToLower(), @"(?<=\b(?:mc|mac)?)[a-zA-Z](?<!'s\b)", m => m.Value.ToUpper());
// input = O'Reilly, M'Grego, D'Angelo, MacDonald's, McFry

7voto

Jamie Ide Points 28680

Mc et Mac sont des préfixes de nom de famille courants aux États-Unis, et il en existe d'autres. TextInfo.ToTitleCase ne gère pas ces cas et ne devrait pas être utilisé dans ce but. Voici comment je procède :

    public static string ToTitleCase(string str)
    {
        string result = str;
        if (!string.IsNullOrEmpty(str))
        {
            var words = str.Split(' ');
            for (int index = 0; index < words.Length; index++)
            {
                var s = words[index];
                if (s.Length > 0)
                {
                    words[index] = s[0].ToString().ToUpper() + s.Substring(1);
                }
            }
            result = string.Join(" ", words);
        }
        return result;
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X