2016-11-14 6 views
0

Die Eingabe, die an meine Methode übergeben wird, muss die gewünschte Anzahl an Zeichen haben. Die minimale Anzahl von Vorzeichen wird dynamisch durch einen anderen Eingabeparameter angegeben. Also habe ich einen Ausdruck vorbereitet, der zur Bestätigung der Eingabe verwendet wird, aber das Problem ist, dass er das Zeichenzeichen in der Zeichenfolge nicht finden kann und einen falschen Wert zurückgibt. Nach dem MSDN:Reguläre Ausdrücke und Zeichen

[Zeichengruppe], entspricht ein einzelnes Zeichen in character_group. Standardmäßig wird bei der Übereinstimmung die Groß-/Kleinschreibung beachtet.

und

{n,}, entspricht die vorherige Element mindestens n mal.

Meine Methode:

public static bool HasSign(int minimChar, string input) 
     { 
      _pattern = "[[email protected]#$%^&*()_+={}[]\\|?/.><,~`]{" + minimChar + ",}"; 
      rgx=new System.Text.RegularExpressions.Regex(_pattern); 
      var res = rgx.Match(input); 
      return res.Success; 
     } 
+0

Können Sie ein Beispiel geben zu arbeiten mit, zB Eingabezeichenfolge, die minimchar Zeichenfolge? – BugFinder

Antwort

1

Ihre Zeichenklasse vorzeitig endet hier und das ganze Muster ist „gebrochen“:

_pattern = "[[email protected]#$%^&*()_+={}[]\\|?/.><,~`]{" + minimChar + ",}"; 
          ^

Es ist ein Zeichen von der [[email protected]#$%^&*()_+={}[] Zeichenklasse übereinstimmt, und dann eine Sequenz von Subpatterns (\\|?/.><,~`]{2,} - 1 oder 0 | Zeichen, /, irgendein Zeichen aber ein Newlin e, >, <, ,, ~ und `, und dann 2 oder mehr ] Symbole).

Siehe what string it matches.

Sie müssen die ] innen entweder zu entkommen oder sie an der Zeichenklasse Anfang setzen und eine wortgetreue Stringliteral verwenden, um \\ zu verwenden, um einen umgekehrten Schrägstrich entsprechen:

_pattern = @"[][email protected]#$%^&*()_+={}[\\|?/.><,~`]{" + minimChar + ",}"; 
     ^^    ^^