Почему шаблон в этом коде не работает?

#c# #xamarin

#c# #xamarin

Вопрос:

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

 const int minLength = 8;
const string pattern = ("[@#$%^amp; =!]");
public string Message { get; set; } = $"Password should at least {minLength} characters long and should include a special character {pattern}.";

public bool Check(string value) => !string.IsNullOrEmpty(value) amp;amp; value.Length >= minLength amp;amp; value.Contains(pattern);
  

Комментарии:

1. string.Contains(pattern) не проверяет, содержит ли строка символ в шаблоне. Он проверяет, содержит ли он полный шаблон.

2. Кроме того, наверняка вы не хотите таким образом проверять наличие специального символа? Вот небольшой пример, который вы не улавливаете, например: ~?<>()"- (и, конечно, другие). Возможно, было бы просто проще убедиться, что у них есть что -то, отличное от буквенно-цифровых символов, а не группа специальных символов, занесенных в белый список.

Ответ №1:

Регулярное выражение не может быть применено с помощью Contains метода. Contains ищет последовательность символов внутри string .

Вам нужно было бы сделать что-то вроде этого:

 const int minLength = 8;
const string pattern = ("[@#$%^amp; =!]");
Regex regex = new Regex(pattern);
public bool Check(string value) => !string.IsNullOrEmpty(value) amp;amp; 
                         value.Length >= minLength amp;amp; regex.Match(value).Success;
  

Ответ №2:

String.Contains() соответствует ли строка-литерал.

чтобы использовать регулярное выражение, используйте Regex класс

     Regex rx = new Regex(@"[@#$%^amp; =!]",
      RegexOptions.Compiled | RegexOptions.IgnoreCase);

    // Define a test string.        
    string text = "The the quick brown fox  fox jumps over the lazy dog dog.";

    // Find matches.
    MatchCollection matches = rx.Matches(text);