2010-06-17 6 views
16

Erlaubte Zeichen sind (mindestens) A-Z, a-z, 0-9, ö, Ö, ä, ä, å, Å und deutsch, lettisch, estnisch (falls vorhanden) spezielle Zeichen? Gibt es eine fertige Methode oder muss ich Blacklist (nicht erlaubte Zeichen) und reguläre Ausdrücke IsMatch machen? Wenn kein Ready-Made wie Blacklist zu verwenden?Wie finde ich heraus, ob die Zeichenfolge nicht-alphanumerische Zeichen in C# /. NET 2.0 enthält?

+0

Ein weiterer Thread mit Antworten zu prüfen http://StackOverflow.com/Questions/2371780/ Könnte zusätzliche Einblicke bieten. –

+0

mögliches Duplikat von [.net Regular Expression, um jede Art von Buchstaben aus einer beliebigen Sprache zu finden] (http://stackoverflow.com/questions/2949861/net-regular-expression-to-match-any-kind-of-letter- from-any-language) – GvS

Antwort

30

Ich weiß nicht, wie Sonderzeichen aus allen diesen Sprachen kategorisiert werden, aber Sie könnten überprüfen, ob die Char.IsLetterOrDigit Methode mit dem übereinstimmt, was Sie tun möchten. Es funktioniert zumindest für die Ziffern und Buchstaben I getestet:

string test = "Aasdf345ÅÄÖåäöéÉóÓüÜïÏôÔ"; 
if (test.All(Char.IsLetterOrDigit)) { ... } 

Die Char.IsLetterOrDigit kehrt gilt für Zeichen, die in Unicode als UppercaseLetter, LowercaseLetter, TitlecaseLetter, ModifierLetter, OtherLetter oder DecimalDigitNumber kategorisiert sind.

+0

Was ist test.All? Das ist keine String-Methode, ist es eine Art von Erweiterungsmethode? Oder eine LINQ-Methode? – Task

+0

@Task 'All' ist eine linq-Erweiterung von string. Siehe http://msdn.microsoft.com/en-us/library/system.string.aspx – mydogisbox

+0

Ah! Der Abschnitt "Erweiterungsmethoden" der Dokumentation ist neu für mich, ich hatte das vorher nicht gesehen. Ich glaube, ich habe mich im früheren Bereich "Eigenschaften" oder "Methoden" daran gewöhnt, alles zu finden, was ich brauche. Vielen Dank! – Task

5

Untersuchen Sie char.IsLetterOrDigit(char).

Zum Beispiel:

myString.All(c => char.IsLetterOrDigit(c)); 
+1

Nur neugierig, aber warum wurde das abgelehnt? Soweit ich das beurteilen kann, ist es ein absolut gültiger Weg, um das zu tun, was das OP forderte. – Flynn1179

+0

Ah .. habe mich nur genauer angesehen; habe die 0-9-Anforderung dort nie bemerkt.Ich habe meine Antwort dahingehend geändert, dass "IsLetterOrDigit" anstelle von "IsLetter" verwendet wird. – Flynn1179

+0

Eine Abkürzung dafür ist 'myString.All (char.IsLetterOrDigit);' – gls123

4

Eine schwarze Liste für Zeichen ist wahrscheinlich ziemlich groß :-)

Sie den regulären Ausdruck unabhängig,

^[\d\p{L}]+$ 

übereinstimmen Dezimalstellen und Buchstaben verwenden können von Skript.

Dieser reguläre Ausdruck besteht aus einer Zeichenklasse mit den Kürzeln \d - die jede Ziffer (230 insgesamt in der BMP) und \p{L} enthält, die als „Buchstaben“ (46.817 im BMP) klassifiziert jedes Unicode-Zeichen enthält. Die Zeichenklasse wird dann mindestens einmal wiederholt und zwischen ^ und $ eingebettet - den Anfangs- und Endankern der Zeichenkette, so dass sie mit der vollständigen Zeichenkette übereinstimmt.

Für einige regex Motoren, da Sie in lateinischen Buchstaben nur interessiert sind, offenbar konnte man aber auch

^[\d\p{Letter}]+$ 

verwenden, wird .NET dies nicht unterstützen. Der erste regex, der oben erwähnt wird, fängt tatsächlich alles ein, das eine Ziffer oder ein Buchstabe in irgendein Skript ist. So wird es pflichtgemäß auf indische oder arabische Zahlen und hebräische, kyrillische und andere nicht-lateinische Schriften abgestimmt. Je nachdem, was Sie wollen, ist dies möglicherweise nicht angebracht.

Wenn das ein Problem darstellt, dann sehe ich keine bessere Option als explizit die Zeichen auflisten, die Sie zulassen möchten. Ich halte es jedoch für gefährlich, anzunehmen, dass Text in einer bestimmten Sprache immer auf das Skript dieser Sprache beschränkt ist. Wenn ich einen tschechischen oder polnischen Namen in einem deutschen Text schreiben würde, würde ich wahrscheinlich mehr als nur [a-zA-ZäöüÄÖÜß] brauchen.

+0

+1 für die \ p {option} –

+0

danke! kannst du bitte erklären, wie^[\ d \ p {L}] + $ funktioniert. Ich überprüfte aus dem Internet, aber ich konnte es nicht ganz zusammenfassen ... –

-1

Es wäre einfacher, die Übereinstimmung der zulässigen Zeichen mit einer falschen Rückgabe zu ermitteln.

Verwandte Themen