2010-07-20 7 views
5

¿Cómo puedo verificar si mi entrada es un tipo particular de cadena? Entonces no hay numérico, no "/", ...verificar el contenido de la entrada de cadena

+0

D o, por casualidad, ¿significa alfabético (solo letras) en lugar de cadena? – BoltClock

+1

¿Quiere decir, "¿Cómo puedo verificar si una cadena contiene solo caracteres?" –

+1

¿Te refieres a una cadena que consta únicamente de caracteres alfanuméricos? ¿Puedes definir qué personajes exactamente? –

Respuesta

15

Bueno, para comprobar que una entrada es en realidad un objeto de tipo System.String, sólo tiene que hacer:

bool IsString(object value) 
{ 
    return value is string; 
} 

comprobar que un string contiene sólo letras, se podría hacer algo como esto:

bool IsAllAlphabetic(string value) 
{ 
    foreach (char c in value) 
    { 
     if (!char.IsLetter(c)) 
      return false; 
    } 

    return true; 
} 

Si la intención de combinar estos, usted podría hacerlo:

bool IsAlphabeticString(object value) 
{ 
    string str = value as string; 
    return str != null && IsAllAlphabetic(str); 
} 
+1

Buen ejemplo de ambos, ya que el título y la pregunta no coinciden exactamente. – corsiKa

6

No está del todo claro lo que quiere, pero probablemente pueda hacerlo con una expresión regular. Por ejemplo, para comprobar que la cadena contiene sólo letras en az o AZ usted puede hacer esto:

string s = "dasglakgsklg"; 
if (Regex.IsMatch(s, "^[a-z]+$", RegexOptions.IgnoreCase)) 
{ 
    Console.WriteLine("Only letters in a-z."); 
} 
else 
{ 
    // Not only letters in a-z. 
} 

Si también desea permitir espacios, guiones, u otros caracteres sólo tiene que añadir que entre los corchetes en la expresión regular . Tenga en cuenta que algunos caracteres tienen un significado especial dentro de las clases de caracteres de expresiones regulares y deben escaparse con una barra diagonal inversa.

También puede usar \p{L} en lugar de [a-z] para que coincida con cualquier carácter Unicode que se considere una letra, incluidas las letras en alfabetos extranjeros.

1

Algo como esto (no se ha probado) puede ajustarse a su (vago) requisito.

if (input is string) 
{ 
    // test for legal characters? 
    string pattern = "^[A-Za-z]+$"; 
    if (Regex.IsMatch(input, pattern)) 
    { 
     // legal string? do something 
    } 

    // or 
    if (input.Any(c => !char.IsLetter(c))) 
    { 
     // NOT legal string 
    } 
} 
2
using System.Linq; 
... 

bool onlyAlphas = s.All(c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')); 
+1

+1 por no usar expresiones regulares – Aren

+1

-1 por ser brutal – Luiscencio

+0

No me malinterpreten: regex tiene sus aplicaciones. Pero para un algoritmo sencillo de un solo paso como este, es excesivo. Sin embargo, me gusta más la respuesta de Reed. No sabía sobre 'Char.IsLetter'. – StriplingWarrior

10

Si se refiere a "es la cadena completamente letras", que podría hacer:

string myString = "RandomStringOfLetters"; 
bool allLetters = myString.All(c => Char.IsLetter(c)); 

Esto se basa en el método de LINQ y Char.IsLetter.

+1

esto es genial =) – Luiscencio

+0

¿Cómo funciona Char.IsLetter con la localización? – ahsteele

+0

@ahsteele: En realidad System.Globalization.CharUnicodeInfo para manejar esto para caracteres no latinos. –

Cuestiones relacionadas