#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);