2012-03-30 1 views
2

Ich habe die folgende Regex-Prüfung, die sicherstellt, dass nur Buchstaben, Zahlen und * Zeichen eingegeben werden.Wie '[' und ']' durch eine Regex-Prüfung zugelassen werden

Regex.IsMatch(searchString, @"^[a-zA-Z0-9*]+$") 

Allerdings würde Ich mag es verlängern auch zu () [ ] Zeichen zu akzeptieren. Dies ist, was ich bisher versucht habe, aber es ist falsch zurückgegeben:

Regex.IsMatch(searchString, @"^[a-zA-Z0-9[]()*]+$") 

Konnte jemand eine Lösung vorschlagen?

Antwort

4

sie Flucht mit \:

Regex.IsMatch(searchString, @"^[a-zA-Z0-9\[\]()*]+$") 

sollte beachtet werden, dass die Escape-Regeln unterschiedlich sind, je nachdem, ob das Zeichen innerhalb einer Zeichenklasse ist (zB [_chars_]) oder nicht.

Zum Beispiel - ( muss zu \( außerhalb einer Zeichenklasse escaped sein, weil es sonst den Anfang einer Gruppe bezeichnet (d. H. (_something to capture_)). Andere Zeichen wie ? und . müssen immer maskiert werden, wenn sie sich außerhalb einer Zeichenklasse befinden.

Hinweis

Ich habe die Verwendung des Begriffs bearbeitet out ‚Charakter Gruppe‘, weil sie zu Recht mich darauf hingewiesen worden ist, dass aber eindeutig zu beschreiben versuche ich, kann es immer noch Verwirrung stiften mit eine 'Gruppe' (Capturing/Non-Capturing). Regex kann verwirrend genug sein, wie es ist, ohne dass ich das Wasser weiter verdirbelt.

+0

Danke, das ist genau das, was ich gesucht habe! –

+0

'[' muss in Zeichenklassen nicht maskiert werden. – Joey

+0

Nicht sicher, ich verstehe - wie '[[]'? - Ich nehme die Aussage jedoch ab, um Verwirrung zu vermeiden. –

3

sollten Sie Sonderzeichen entkommen wie folgt aus:

Regex.IsMatch(searchString, @"^[a-zA-Z0-9\[\]()*]+$"); 
+0

Sie müssen nicht entkommen '(' oder ')' innerhalb einer '[]' Gruppe –

+0

@AndrasZoltan Es gibt kein Entweichen auf den eckigen Klammern hier (und ich kann keine Änderung sehen). Auch zu bestätigen '' '' repräsentieren Zeichenklassen, keine Gruppe. Gruppen haben eine ganz andere Bedeutung in Regex als Sie aus Ihrer Antwort wissen, aber achten Sie darauf, die richtige Terminologie zu verwenden. – rrrr

+0

@rrrr ursprünglich waren die Klammern \ (\) - was unnötig war. Ich glaube, "Charaktergruppe" und "Charakterklasse" sind austauschbar - eine '[]' * -Gruppe * ist eine Zeichengruppe. Aber vielleicht ist es am besten, sich davon abzuhalten, "Gruppe" überhaupt mit Charakteren zu verwenden - und so Verwirrung zu vermeiden! :) –