2012-04-02 11 views
4

Ich möchte überprüfen, ob eine Zeichenfolge nur richtige Buchstaben enthält. Ich habe dafür Char.IsLetter verwendet. Mein Problem ist, wenn es Zeichen wie é oder á gibt, werden sie auch als richtige Buchstaben bezeichnet, was nicht sein sollte.überprüfen, ob char isletter

Gibt es eine Möglichkeit, ein Zeichen als richtigen Buchstaben A-Z oder a-z ohne Sonderzeichen wie á zu prüfen?

+0

Ich habe eine Datei exportieren und importieren Sie es in eine andere Anwendung, die Fehler aus, wenn es spezielle Zeichen wie é, ... – Karl

+7

Natürlich é oder á sind Buchstaben ... – leppie

Antwort

15
bool IsEnglishLetter(char c) 
{ 
    return (c>='A' && c<='Z') || (c>='a' && c<='z'); 
} 

Sie diese Methode eine Erweiterung vornehmen:

static bool IsEnglishLetter(this char c) ... 
6

können Sie regelmäßig verwenden Ausdruck \w oder [a-zA-Z] es

+0

Ich denke, die zweite ist besser, die erste könnte auch akzentuierte Zeichen akzeptieren. – zmbq

+0

nicht 100% sicher, aber wie ich mich erinnere, wird es nicht. Ich hatte damit Probleme. \ w passt beispielsweise nicht zu Norwegens Symbolen. Es gibt einen Weg mit Unicode zu aktivieren: http://www.regular-expressions.info/unicode.html aber ich habe es nicht versucht. – Sly

+2

Ich bin mir auch nicht sicher. Da wir beide sicher sind, dass [a-zA-Z] funktionieren wird, und jeder, der den Code liest, ist es besser. – zmbq

2
// Create the regular expression 
string pattern = @"^[a-zA-Z]+$"; 
Regex regex = new Regex(pattern); 

// Compare a string against the regular expression 
return regex.IsMatch(stringToTest); 
8

Sie Char.IsLetter(c) && c < 128 verwenden können. Oder nur c < 128 an sich, das scheint Ihrem Problem am nächsten zu sein.

Aber Sie lösen eine Codierung Problem durch Filtern von Zeichen. Untersuchen Sie, was diese andere Anwendung genau versteht.

Es könnte sein, dass Sie nur mit Encoding.GetEncoding(someCodePage) schreiben sollten.

+0

c <128 von selbst wird keine Buchstaben zurückgeben –

-1

Verwenden Linq für einen einfachen Zugang:

if (yourString.All(char.IsLetter)) 
{ 
    //just letters are accepted. 
} 
+2

Eh? Das OP hat explizit darauf hingewiesen, dass Char.IsLetter nicht das tut, was benötigt wird. –