2016-11-14 7 views
0

Вход, который передается моему методу, должен иметь желаемое количество знаков. Минимальное количество знаков указывается динамически другим входным параметром. Поэтому я подготовил выражение, которое используется для подтверждения ввода, но проблема в том, что он не может найти символ знака внутри строки и возвращает ложное значение. Согласно MSDN:Регулярные выражения и знаки

[character_group], Соответствует любому символу в символьной группе. По умолчанию совпадение чувствительно к регистру.

и

{п,}, Спички предыдущий элемент, по меньшей мере п раз.

Мой метод:

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

Можете ли вы привести пример работы с, например, входной строкой, строкой minimchar? – BugFinder

ответ

1

Ваш класс персонажа заканчивается преждевременно здесь и вся картина «сломанный»:

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

Это соответствие полукокса из класса [[email protected]#$%^&*()_+={}[] символов, и затем последовательность подшаблонов (\\|?/.><,~`]{2,} - 1 или 0 | chars, /, любой символ, но newlin e, >, <, ,, ~ и `, а затем 2 или более ] символов).

См. what string it matches.

Вам нужно либо избежать ] внутри, или положить его в классе символов начала и использовать дословный строковый литерал, чтобы использовать \\, чтобы соответствовать обратной косой черты:

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