c# - texto - Cómo capitalizar nombres
primera letra mayuscula asp net (8)
Espero que esto ayude:) ... Pero tenga en cuenta que el proceso probablemente sea lento si tiene muchas, muchas cadenas para cambiar el caso ...
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));
Actualización: O también podría usar un evaluador personalizado para cambiar el caso de esta manera:
string str = "to title case";
Console.WriteLine(Regex.Replace(str, @"/b[a-z]", delegate (Match m)
{
return m.Value.ToUpper();
}
));
Tenga en cuenta que en mi prueba con 1,000,000 iteraciones, el primer método fue solo 0,48 segundos más rápido que el del evaluador (el primero tomó 6,88 segundos y el último 7,36 segundos para completar las 1,000,000 iteraciones) por lo que no tomé en cuenta la velocidad para elige cualquiera ...
así que, básicamente, si quiero transformar un nombre de
stephen smith
a
Stephen Smith
Puedo hacerlo fácilmente con come css en la página, pero lo ideal sería atraparlo antes y cambiarlo cuando salga de la base de datos. ¿Cómo puedo obtener csharp para capturar una cadena?
¿hay una función para esto?
Este es un método de extensión en la clase de cadena que pone en mayúscula una sola palabra. Puede usarlo junto a str.Split()
y str.Join
para str.Join
en mayúsculas cada palabra de la cadena str
. Puede agregar cheques para cadenas de longitud vacías o de un carácter.
public static string Capitalize(this string word)
{
return word.Substring(0, 1).ToUpper() + word.Substring(1).ToLower();
}
Esto funciona para mí con apellidos que tienen un ''carácter en ellos.
if (Surname.Contains("''"))
{
String[] Names = Surname.Split(''/''').ToArray();
Surname = textInfo.ToTitleCase(Names[0].ToString());
Surname += "''''";
Surname += textInfo.ToTitleCase(Names[1].ToString());
}
Los nombres son difíciles. Las reglas simples de First Letters no se aplican . El único enfoque del senador aquí es preguntarles a sus usuarios cómo lo quieren. Cualquier otra cosa puede causar ofensa.
Si mi nombre es MacPhearson, ODowel, o simplemente Marc, Marc o incluso mArC, francamente, déjalo en paz. Confíe en el usuario para hacerlo bien. Esto se vuelve aún más complicado a medida que avanzas entre culturas.
No, no hay. Siempre que sepa que la cadena que está manejando es un nombre (o, mejor dicho, una secuencia de nombres humanos separados por espacios), debería poder codificarlo usted mismo dentro de uno for
ciclo y utilizando Char.ToUpper
. Sin embargo, hay casos específicos de la cultura, como las palabras árabes "bin", "al", etc. utilizados en los nombres, que no deben escribirse con mayúscula (siempre que se utilice una transcripción latina). Lo mismo vale para "von" o "van" en los idiomas occidentales.
Actualización: tenga en cuenta que msdn.microsoft.com/en-us/library/… tiene un propósito diferente : no está destinado a poner en mayúscula las primeras letras de los nombres humanos, sino a proporcionar una cubierta adecuada de los títulos (como los titulares de los artículos noticiosos).
Aunque la implementación actual en .NET puede cumplir fácilmente el propósito solicitado, evitaría hacerlo. La razón es que la implementación puede cambiar significativamente en el futuro y, por lo tanto, es más seguro realizar una implementación personalizada para nombres humanos. Además, dudo que el método sea realmente utilizable para el título de las cadenas con respecto a la cultura dada. Por ejemplo, en checo ( "cs-CZ"
), el título apropiado debe mayúsculas solo con la primera letra de la primera palabra.
Puede hacerlo utilizando el método ToTitleCase
de la clase 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));
Una pequeña extensión de la respuesta ofrecida por Pedro:
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());
});
Esto capitalizará correctamente a McNames además del caso del título. por ejemplo, "simon mcguinnis" -> "Simon McGuinnis"
- El primer grupo sin captura coincidirá con cualquier carácter de salto de palabra O "Mc" / "mc".
- Si coincide con un salto de palabra, los grupos 1 y 2 están vacíos y el grupo 3 contiene ese carácter.
Si coincide con "Mc" o "mc", los grupos 1 y 2 contienen "m" y "c" y el grupo 3 está vacío.
- El grupo 1 (la "m" o la "M") está en mayúscula.
- El grupo 2 (la "c") no se altera.
- El grupo 3 (el carácter break) permanece sin cambios.
- El grupo 4 (la primera letra de la siguiente palabra) está en mayúscula.
Los 4 grupos, vacíos o no, se concatenan para generar la cadena de retorno.
en vista
string titulo = "";
string result = System.Globalization.CultureInfo.TextInfo.ToLower(titulo);
luego aplica la propiedad css
text-transform = font-family: sans-serif;