2016-06-16 13 views
2

Ich brauche String zu validieren, wenn folgende Format hatRegex Validate Array nach Fragezeichen

anyName?[anyName=anyName;anyName=anyName] 

wo anyname Kombination aller Ziffern Buchstaben von Aa-Zz und 0-9 und Anzahl der Paare anyname = anyname in die [] ist mindestens eine

Begonnen mit dieser [A-Za-z0-9]+\?[[A-Za-z0-9]=[A-Za-z0-9]....] irgendeine Hilfe?

+0

Sie tun müssen, um entkomme auch den quadratischen Klammern. – juharr

+0

fügen Sie auch '+' nach '[A-Za-z0-9]' –

Antwort

4

Sie

verwenden
^[A-Za-z0-9]+\?\[[A-Za-z0-9]+=[A-Za-z0-9]+(?:;[A-Za-z0-9]+=[A-Za-z0-9]+)*]$ 

Siehe regex demo

Aufteilung:

  • ^ - Beginn der Zeichenfolge
  • [A-Za-z0-9]+-1 oder mehr alphanumerics
  • \? - Ein Literal ?
  • \[ - Ein Literal [
  • [A-Za-z0-9]+ - 1+ alphanumerische Symbole
  • = - Ein Literal =
  • [A-Za-z0-9]+ - 1+ alphanumerische Symbole
  • (?:;[A-Za-z0-9]+=[A-Za-z0-9]+)* - null oder mehr Sequenzen von:
    • ; - ein wörtliches ; und
    • [A-Za-z0-9]+=[A-Za-z0-9]+ - siehe oben
  • ] - ein wörtliches ]
  • $ - Ende der Zeichenkette

es ein wenig mit dem Groß- und Kleinschreibung Modifikator Kürzen und \d :

(?i)^[A-Z\d]+\?\[[A-Z\d]+=[A-Z\d]+(?:;[A-Z\d]+=[A-Z\d]+)*]$ 

Und um \d nur übereinstimmen 0-9 Bereich ohne Unicode-Ziffern zu ermöglichen, kompilieren Sie mit RegexOptions.ECMAScript Option.

Eine mögliche C# regex Erklärung ist:

var rx = new Regex(@"^[A-Z\d]+\?\[[A-Z\d]+=[A-Z\d]+(?:;[A-Z\d]+=[A-Z\d]+)*]$", RegexOptions.IgnoreCase | RegexOptions.ECMAScript); 
+1

Nur eine Anmerkung nach dem Lesen der Charles 'Antwort: Der '+' Quantifizierer entspricht 1 oder mehr Vorkommen des quantifizierten Unterpatterns und '*' entspricht * Null * oder mehr. Wenn Sie also eine leere Zeichenfolge zulassen, ersetzen Sie das '+' durch '*'. Um also '? [=]' Sie brauchen '(? I)^[AZ \ d] * \? \ [[AZ \ d] * = [AZ \ d] * (?:; [AZ \ d] * = [AZ \ d] *) *] $ '. Dieser Teil ist in der Frage unklar. –

+0

und was ist (? I)? – kosnkov

+1

Es ist der Case Insensitive Inline Modifier. Sie können es entfernen und den Regex mit der Option 'RegexOptions.IgnoreCase' kompilieren. Wenn es sich um eine Validierung handelt, würde ich lieber '\ z' anstelle von' $ 'am Ende verwenden (da' $ 'vor der letzten Zeilenumbruch übereinstimmen kann). –

1

ich noch nicht da Ruf kommentieren, aber Wiktor Antwort geht davon aus, dass anyName sich mindestens ein Zeichen lang ist.Wenn das nicht der Fall ist, brauchen Sie ein

^[A-Za-z0-9]*\?\[[A-Za-z0-9]*=[A-Za-z0-9]*(?:;[A-Za-z0-9]*=[A-Za-z0-9]*)*]$ 
  • * Matches 0 oder mehr
  • + Treffer für 1 oder mehr
  • {x, y} Einstimmungen zwischen x und y inklusive