2010-07-20 8 views
5

Wie kann ich überprüfen, ob meine Eingabe eine bestimmte Zeichenfolge ist? Also kein numerisches, kein "/", ...Inhalt der Zeichenfolgeneingabe prüfen

+0

D o meinst du vielleicht alphabetisch (nur Buchstaben) statt String? – BoltClock

+1

Meinst du, "Wie kann ich überprüfen, ob eine Zeichenfolge nur Zeichen enthält?" –

+1

Meinst du eine Zeichenfolge, die nur aus alphanumerischen Zeichen besteht? Kannst du welche Charaktere genau definieren? –

Antwort

15

Nun, zu prüfen, ob eine Eingabe tatsächlich ein Objekt vom Typ ist System.String, können Sie einfach tun:

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

Um zu überprüfen, dass ein string nur Buchstaben enthält, können Sie etwas tun könnte:

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

    return true; 
} 

Wenn Sie diese kombinieren möchten, können Sie dies tun:

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

Gutes Beispiel für beides, da der Titel und die Frage nicht genau übereinstimmen. – corsiKa

6

Es ist nicht ganz klar, was Sie wollen, aber Sie können es wahrscheinlich mit einem regulären Ausdruck tun. Zum Beispiel prüfen, ob die Zeichenfolge nur Buchstaben in az oder AZ enthalten, dies zu tun:

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

Wenn Sie wollen auch Räume erlauben, Unterstreichen oder andere Zeichen sie einfach zwischen den eckigen Klammern im regulären Ausdruck hinzufügen . Beachten Sie, dass einige Zeichen in regulären Ausdrucksklassen eine spezielle Bedeutung haben und mit einem umgekehrten Schrägstrich versehen werden müssen.

Sie können auch \p{L} anstelle von [a-z] verwenden, um alle Unicode-Zeichen zu finden, die als Buchstaben gelten, einschließlich Buchstaben in fremden Alphabeten.

1

So etwas (nicht getestet) kann zu Ihrer (vagen) Anforderung passen.

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 für nicht mit regex! – Aren

+1

-1 für brutal sein – Luiscencio

+0

Versteh mich nicht falsch: regex hat seine Verwendungen. Aber für einen einfachen Single-Pass-Algorithmus wie diesen ist es Overkill. Ich mag Reeds Antwort jedoch mehr. Wusste nicht über 'Char.IsLetter'. – StriplingWarrior

10

Wenn Sie meinen, "die Zeichenfolge vollständig Buchstaben ist", könnten Sie tun:

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

Dies beruht auf LINQ und die Char.IsLetter Methode.

+1

das ist cool =) – Luiscencio

+0

Wie funktioniert Char.IsLetter mit Lokalisierung? – ahsteele

+0

@ahsteele: Es tatsächlich System.Globalization.CharUnicodeInfo, um dies für nicht lateinische Zeichen zu behandeln. –