validar - saber si una letra es mayuscula c#
¿Cómo poner en mayúscula el primer carácter de cada palabra, o el primer carácter de una cadena completa, con C#? (7)
Hay otra solución elegante:
Defina la función ToTitleCase
en una clase estática de su proyecto
using System.Globalization;
public static string ToTitleCase(this string title)
{
return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(title);
}
Y luego utilícelo como una extensión de cadena en cualquier parte de su proyecto:
"have a good day !".ToTitleCase() // "Have A Good Day !"
Podría escribir mi propio algoritmo para hacerlo, pero creo que debería haber el equivalente de humanizar a Ruby en C #.
Lo busqué en Google pero solo encontré formas de humanizar las fechas.
Ejemplos:
- Una forma de convertir "Lorem Lipsum et" en "Lorem lipsum et"
- Una forma de convertir "Lorem lipsum et" en "Lorem Lipsum Et"
La técnica CSS está bien, pero solo cambia la presentación de la cadena en el navegador. Un método mejor es poner el texto en mayúscula antes de enviarlo al navegador.
La mayoría de las implementaciones anteriores están bien, pero ninguna de ellas aborda el problema de lo que sucede si tiene palabras de mayúsculas y minúsculas que deben conservarse, o si desea usar el Caso de título verdadero, por ejemplo:
"Donde estudiar cursos de doctorado en los Estados Unidos"
o
"Formulario UB40a del IRS"
El uso de CultureInfo.CurrentCulture.TextInfo.ToTitleCase (string) conserva las letras mayúsculas como en "deportes y béisbol de MLB", que se convierte en "Sports And MLB Baseball", pero si toda la cadena se pone en mayúsculas, esto causa un problema.
Así que armé una función simple que te permite mantener las palabras mayúsculas y mayúsculas y hacer minúsculas (si no están al principio y al final de la frase) incluyéndolas en un conjunto de cadenas de cadenas de Casos especiales y Casos inferiores:
public static string TitleCase(string value) {
string titleString = ""; // destination string, this will be returned by function
if (!String.IsNullOrEmpty(value)) {
string[] lowerCases = new string[12] { "of", "the", "in", "a", "an", "to", "and", "at", "from", "by", "on", "or"}; // list of lower case words that should only be capitalised at start and end of title
string[] specialCases = new string[7] { "UK", "USA", "IRS", "UCLA", "PHd", "UB40a", "MSc" }; // list of words that need capitalisation preserved at any point in title
string[] words = value.ToLower().Split('' '');
bool wordAdded = false; // flag to confirm whether this word appears in special case list
int counter = 1;
foreach (string s in words) {
// check if word appears in lower case list
foreach (string lcWord in lowerCases) {
if (s.ToLower() == lcWord) {
// if lower case word is the first or last word of the title then it still needs capital so skip this bit.
if (counter == 0 || counter == words.Length) { break; };
titleString += lcWord;
wordAdded = true;
break;
}
}
// check if word appears in special case list
foreach (string scWord in specialCases) {
if (s.ToUpper() == scWord.ToUpper()) {
titleString += scWord;
wordAdded = true;
break;
}
}
if (!wordAdded) { // word does not appear in special cases or lower cases, so capitalise first letter and add to destination string
titleString += char.ToUpper(s[0]) + s.Substring(1).ToLower();
}
wordAdded = false;
if (counter < words.Length) {
titleString += " "; //dont forget to add spaces back in again!
}
counter++;
}
}
return titleString;
}
Este es solo un método rápido y simple, y probablemente pueda mejorarse un poco si desea dedicarle más tiempo.
Si desea mantener el uso de mayúsculas en palabras más pequeñas como "a" y "de", simplemente elimínelas de la matriz de cadenas de casos especiales. Diferentes organizaciones tienen diferentes reglas sobre la capitalización.
Puede ver un ejemplo de este código en acción en este sitio: Egg Donation London - este sitio crea automáticamente rutas de exploración en la parte superior de las páginas al analizar la URL, por ejemplo, "/ services / uk-egg-bank / introduction" - luego cada el nombre de la carpeta en el camino tiene guiones reemplazados por espacios y escribe con mayúscula el nombre de la carpeta, por lo que uk-egg-bank se convierte en UK Egg Bank. (preservando la mayúscula ''UK'')
Una extensión de este código podría ser tener una tabla de búsqueda de acrónimos y palabras en mayúsculas / minúsculas en un archivo de texto compartido, una tabla de base de datos o un servicio web para que la lista de palabras de mayúsculas y minúsculas se pueda mantener desde un solo lugar y se aplique a muchos Aplicaciones que dependen de la función.
No existe una solución precompilada para una correcta captación lingüística en .NET. ¿Qué tipo de capitialización vas a buscar? ¿Sigues las convenciones del Manual de estilo de Chicago? ¿AMA o MLA? Incluso el uso de mayúsculas en oraciones simples en inglés tiene miles de excepciones especiales para palabras. No puedo hablar de lo que humaniza Ruby, pero me imagino que probablemente no siga las reglas lingüísticas del uso de mayúsculas y, en cambio, hace algo mucho más simple.
Internamente, nos encontramos con este mismo problema y tuvimos que escribir un código de una cantidad bastante grande solo para manejar el caso adecuado (en nuestro pequeño mundo) de títulos de artículos, sin tener en cuenta la capitalización de las oraciones. Y de hecho se pone "borroso" :)
Realmente depende de lo que necesite. ¿Por qué intenta convertir las oraciones en mayúsculas (y en qué contexto)?
Por lo que sé, no hay una manera de hacerlo sin escribir (o copiar) el código. C # nets (¡ja!) En sus casos superior, inferior y de título (lo que tiene):
Si solo quiere poner en mayúscula el primer carácter, simplemente coloque esto en un método de utilidad propio:
return string.IsNullOrEmpty(str)
? str
: str[0].ToUpperInvariant() + str.Substring(1).ToLowerInvariant();
También hay un método de biblioteca para capitalizar el primer carácter de cada palabra:
Usa expresiones regulares para que este se vea mucho más limpio:
string s = "the quick brown fox jumps over the lazy dog";
s = Regex.Replace(s, @"(^/w)|(/s/w)", m => m.Value.ToUpper());
Como se comentó en los comentarios de la respuesta de TextInfo.ToTitleCase
, puede usar TextInfo.ToTitleCase
que ha estado disponible desde .NET 1.1. Aquí hay un código correspondiente a su ejemplo:
string lipsum1 = "Lorem lipsum et";
// Creates a TextInfo based on the "en-US" culture.
TextInfo textInfo = new CultureInfo("en-US",false).TextInfo;
// Changes a string to titlecase.
Console.WriteLine("/"{0}/" to titlecase: {1}",
lipsum1,
textInfo.ToTitleCase( lipsum1 ));
// Will output: "Lorem lipsum et" to titlecase: Lorem Lipsum Et
Ignorará las cosas de la carcasa que son todas mayúsculas como "LOREM LIPSUM ET" porque se ocupa de los casos si las siglas están en el texto (para que " NAMBLA " no se convierta en "nambla" o "Nambla").
Sin embargo, si solo quiere poner en mayúscula el primer carácter, puede hacer la solución que está here ... o podría simplemente dividir la cadena y poner en mayúscula la primera en la lista:
string lipsum2 = "Lorem Lipsum Et";
string lipsum2lower = textInfo.ToLower(lipsum2);
string[] lipsum2split = lipsum2lower.Split('' '');
bool first = true;
foreach (string s in lipsum2split)
{
if (first)
{
Console.Write("{0} ", textInfo.ToTitleCase(s));
first = false;
}
else
{
Console.Write("{0} ", s);
}
}
// Will output: Lorem lipsum et