2010-07-20 12 views
5

Come posso verificare se il mio input è un tipo particolare di stringa. Quindi non numerico, no "/", ...controllare il contenuto della stringa di input

+0

D o per caso vuoi dire alfabetico (solo lettere) anziché stringa? – BoltClock

+1

Vuoi dire, "Come posso verificare se una stringa contiene solo caratteri?" –

+1

Intendi una stringa composta solo da caratteri alfanumerici? Puoi definire quali caratteri esattamente? –

risposta

15

Beh, per verificare che un ingresso è in realtà un oggetto di tipo System.String, si può semplicemente fare:

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

Per verificare che un string contiene solo lettere, si potrebbe fare qualcosa di simile:

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

    return true; 
} 

Se si voleva combinare queste, si potrebbe fare così:

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

Un buon esempio di entrambi, poiché il titolo e la domanda non corrispondono esattamente. – corsiKa

6

Non è del tutto chiaro cosa vuoi, ma probabilmente puoi farlo con un'espressione regolare. Ad esempio, per verificare che la stringa contenga solo lettere in az o AZ si può fare questo:

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. 
} 

Se vuoi anche per permettere spazi, sottolinea, o altri caratteri è sufficiente aggiungerle tra le parentesi quadre nelle espressioni regolari . Nota che alcuni personaggi hanno un significato speciale all'interno delle classi di caratteri delle espressioni regolari e devono essere sottoposti a escape con una barra rovesciata.

È inoltre possibile utilizzare \p{L} anziché [a-z] per corrispondere a qualsiasi carattere Unicode che è considerato come una lettera, comprese le lettere negli alfabeti stranieri.

1

Qualcosa di simile (non testato) può soddisfare il tuo (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 per non usare espressioni regolari! – Aren

+1

-1 per essere brutale – Luiscencio

+0

Non fraintendetemi: regex ha i suoi usi. Ma per un semplice algoritmo single-pass come questo, è eccessivo. Mi piace la risposta di Reed di più, però. Non conoscevo 'Char.IsLetter'. – StriplingWarrior

10

Se vuoi dire "è la stringa completamente lettere", si potrebbe fare:

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

Questo si basa su LINQ e il metodo Char.IsLetter.

+1

questo è cool =) – Luiscencio

+0

Come funziona Char.IsLetter con la localizzazione? – ahsteele

+0

@ahsteele: In realtà System.Globalization.CharUnicodeInfo per gestire questo per caratteri non latini. –

Problemi correlati