Как использовать имена
так что в основном, если я хочу преобразовать имя из
stephen smith
к
Stephen Smith
Я могу легко сделать это с помощью css на странице, но в идеале я бы хотел поймать его раньше и изменить его, когда он выходит из базы данных. как я могу получить csharp, чтобы запечатлеть строку.
есть ли функция для этого?
Ответы
Ответ 1
Вы можете сделать это, используя метод ToTitleCase
System.Globalization.TextInfo класс:
CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
TextInfo textInfo = cultureInfo.TextInfo;
Console.WriteLine(textInfo.ToTitleCase(title));
Console.WriteLine(textInfo.ToLower(title));
Console.WriteLine(textInfo.ToUpper(title));
Ответ 2
Имена сложны. Простые правила первых букв не применяются. Единственный подход сенатора - попросить ваших пользователей, как они этого хотят. Все остальное может стать преступлением.
Если меня зовут MacPhearson, ODowel или просто marc, Marc или даже mArC - тогда, честно говоря, оставьте это в покое. Доверяйте пользователю, чтобы все было правильно. Это становится еще более сложным, поскольку вы идете между культурами.
Ответ 3
Надеюсь, что это поможет:)... Но обратите внимание, что процесс, скорее всего, будет медленным, если у вас много, много строк, чтобы изменить регистр...
string str = "to title case";
Char[] ca = str.ToCharArray();
foreach(Match m in Regex.Matches(str, @"\b[a-z]"))
{
ca[m.Index] = Char.ToUpper(ca[m.Index]);
}
Console.WriteLine(new string(ca));
Обновление:. Или вы также можете использовать пользовательский оценщик для изменения такого типа:
string str = "to title case";
Console.WriteLine(Regex.Replace(str, @"\b[a-z]", delegate (Match m)
{
return m.Value.ToUpper();
}
));
Примечание, что в моем тесте с 1 000 000 итераций первый метод был только на 0,48 секунды быстрее, чем тот, который был у оценщика (первый из них занял 6,88 секунды, а последний - 7,36 секунды, чтобы завершить 1000 000 итераций) поэтому я бы не стал принимать во внимание, чтобы выбрать...
Ответ 4
Нет, нет. Если вы знаете, что строка, которую вы обрабатываете, - это имя (или, лучше сказать, последовательность человеческих имен, разделенных пробелами), вы должны иметь возможность самостоятельно ее кодировать в течение одного цикла for
и используя Char.ToUpper
. Тем не менее, существуют такие специфические для культуры случаи, как арабские слова "bin", "al" и т.д., Используемые в именах, которые не должны быть капитализированы (используется латинская транскрипция). То же самое относится к "фон" или "ван" на западных языках.
Обновление: Обратите внимание, что TextInfo.ToTitleCase
выполняет другую цель - он не предназначен для того, чтобы загладить первые буквы человеческих имен, но чтобы обеспечить надлежащую оболочку заголовков (например, заголовки новостных статей).
Хотя текущая реализация в .NET может легко служить запрошенной цели, я бы этого не сделал. Причина в том, что реализация может значительно измениться в будущем, и, следовательно, более безопасно сделать индивидуальную реализацию для человеческих имен. Более того, я сомневаюсь, что этот метод действительно применим для титульных строк строк по отношению к данной культуре. Например, на чешском языке ("cs-CZ"
) правильный заголовок должен использовать только первую букву первого слова.
Ответ 5
Небольшое расширение ответа, предложенного Педро:
Regex.Replace(Name, @"(?:(M|m)(c)|(\b))([a-z])", delegate(Match m) {
return String.Concat(m.Groups[1].Value.ToUpper(), m.Groups[2].Value, m.Groups[3].Value, m.Groups[4].Value.ToUpper());
});
Это будет правильно использовать McNames в дополнение к заглавной. например "simon mcguinnis" → "Simon McGuinnis"
Все 4 группы, пустые или другие, объединяются для создания возвращаемой строки.
Ответ 6
Это работает для меня с фамилиями, в которых есть символ.
if (Surname.Contains("'"))
{
String[] Names = Surname.Split('\'').ToArray();
Surname = textInfo.ToTitleCase(Names[0].ToString());
Surname += "''";
Surname += textInfo.ToTitleCase(Names[1].ToString());
}
Ответ 7
Это метод расширения класса string, который использует одно слово. Вы можете использовать его вместе с str.Split()
и str.Join
, чтобы использовать каждое слово строки str
. Вы можете добавить проверки для строк с пустым или одним символом.
public static string Capitalize(this string word)
{
return word.Substring(0, 1).ToUpper() + word.Substring(1).ToLower();
}
Ответ 8
в поле зрения
string titulo = "";
string result = System.Globalization.CultureInfo.TextInfo.ToLower(titulo);
, тогда примените свойство css
text-transform = font-family: sans-serif;