Строковая переменная как шаблон в конструкторе Regex () - PullRequest
0 голосов
/ 01 февраля 2019

Я не могу использовать шаблон в строковой переменной, потому что регулярные выражения никогда не совпадают.

Позвольте мне описать, чего я хочу достичь.У меня есть сервис, который возвращает шаблон строки для пароля.Допустим, текущий шаблон:

\\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\\b

. Это означает, что пароль должен содержать не менее 6 символов, одну цифру и одну заглавную букву.Я проверяю это:

string passwordPattern = "\\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\\b";
var rgxPasswordPattern = new Regex(passwordPattern);
var result = rgxPasswordPattern.IsMatch("Password1");

if(result)
    Console.Write("Password match!");
else
    Console.Write("Password doesn't match!");

Это работает, вы можете попробовать это здесь: https://dotnetfiddle.net/FNzZjh

Проблема возникает, когда я использую приведенный выше код в своей среде.Единственное отличие заключается в способе получения шаблона пароля:

string passwordPattern = _signInService.GetPasswordPattern();

Я заметил, что passwordPattern содержит шаблон, заключенный в кавычки: enter image description here

Это приводит к тому, что rgxPasswordPattern содержит также кавычки: enter image description here

Итак, я удалил кавычки из шаблона на passwordPattern.Substring(1, passwordPattern.Length - 2):

enter image description here

И проверено rgxPasswordPattern Переменная: enter image description here

Да, никаких дополнительных кавычек нет.Но пароль все еще не совпадает с шаблоном!enter image description here

Как это возможно?Я понятия не имею, что еще я могу сделать.Шаблон в порядке и работает в dotnetfiddle.net , но не в моей среде.

Буду признателен за любой совет.

1 Ответ

0 голосов
/ 01 февраля 2019

Эта строка

string passwordPattern = "\\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\\b";

в C # означает passwordPattern на самом деле содержит следующую строку

\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\b //notice backslahes count

Когда вы определяете строку в C #, обратный слэш экранирует следующий символ.Поэтому, если вы хотите добавить символ \ в строку, вы должны поставить туда обратную косую черту \\.Так что проблема с вашим сервисом в том, что он возвращает дополнительные обратные слеши в шаблоне.

...