2016-05-13 16 views
1

Ich brauche ein Regex-Muster, das Text entspricht, der "[S]" enthält. Ich habe so etwas versucht:Regex für RegularExpressionAttribute muss enthalten "[S]" Text

^(?\\[S\\]$)$ 

Aber es funktioniert nicht. Wie kann ich das erreichen?

Edit:

Der Zweck der Regex ist es als regulärer Ausdruck zu verwenden, in Client-seitige Validierung:

[RegularExpression("\\[S\\]", ErrorMessage = "The field must contain '[S]'.")] 

Aber das funktioniert nicht. Da ist nur gültig, wenn das Feld "[S]" ist.

+1

Entfernen Sie die Anker, es sollte nur '(? \\ [S \\])', wenn Sie die Regex an den Anfang und das Ende der Zeichenfolge nur dann verankern, wenn die Zeichenfolge genau ist "[S]" Wird zusammenpassen. – Gusman

+0

Ich habe versucht '(? \\ [S \\])' aber das gibt mir eine ArgumentException. – ajmena

+0

hmmm, es ist, weil das "?", Entfernen Sie es – Gusman

Antwort

10

Ich brauche eine Regex, die einen Text entsprechen, wenn diese den Text "[S]" haben.

Warum eine Regex verwenden, um nach einem Literal zu suchen? Verwenden Sie

if (str.Contains("[S]")) { ... } 

Wenn Sie es als Teil einer Regex benötigen, verwenden

if (Regex.IsMatch(s, @"\[S\]")) ... 

UPDATE

bemerkte ich, dass Sie ein Feld enthält ein [S]übereinstimmen soll mit a RegularExpressionAttribute. Die RegularExpressionAttributeerfordert eine vollständige Übereinstimmung der Zeichenfolge.

So benötigen Sie

[RegularExpression(".*\\[S].*", ErrorMessage = "The field must contain '[S]'.")] 

Beachten Sie, dass Sie keine ] außerhalb einer Zeichenklasse entkommen müssen, wird es als eine wörtliche behandelt. Die .* entspricht keinem oder mehr Zeichen als einem Zeilenumbruch. Wenn Sie auch eine neue Zeile anpassen müssen, können Sie entweder "(?s).*\\[S].*" oder @"[\s\S]*\[S][\s\S]*" verwenden.

+0

Ich brauche Regex, weil ich es als regulären Ausdruck verwenden werde. Tut mir leid, das vorher nicht zu erwähnen. – ajmena

+0

Großartig, du hast es, benutze '\ [S]'. Wenn Sie möchten, dass das Muster der vollständigen Zeichenkette * entspricht, fügen Sie einfach Anker ('^' hinzu, um sicherzustellen, dass wir am Anfang einer Zeichenkette suchen und '$', um sicherzustellen, dass wir uns am Ende der Zeichenkette befinden): '@"^\ [S] $ "'. Ich habe vergessen zu erwähnen, dass ']' nicht entgangen sein muss. –

+0

@ajmena: Ist dein Problem jetzt behoben? Ich habe bemerkt, dass du ein Feld * mit * einem '[S]' zusammenbringen willst. Das 'RegularExpressionAttribute' erfordert eine vollständige Übereinstimmung der Zeichenfolgen. ? Also, Sie brauchen '[RegularExpression (". * \\ [S]. * ", ErrorMessage =" Das Feld muss '[S]' enthalten. ")] **. –

Verwandte Themen