Да, вы можете попробовать Linq Any
( определение слова - это сложный вопрос , поэтому позвольте мне придерживаться вашей схемы: \w*{word_to_find}\w*
):
List<string> ForbiddenWords = new List<string>() {
"this",
"password",
"bla-bla-bla",
"123",
};
Regex[] invalidPasswords = ForbiddenWords
.Select(word => new Regex($@"\w*{Regex.Escape(word)}\w*", RegexOptions.IgnoreCase))
.ToArray();
...
if (invalidPasswords.Any(regex => regex.IsMatch(viewModel.Password))) {
// Password is invalid it contains forbidden word(s)
}
Давайте проведем несколько демонстраций:
string[] tests = new string[] {
"MyPassWord",
"PassWord",
"PassWord@123",
"PassWord@5678",
"It's_PassWord@5678",
"ABC123",
"123",
"1234",
"pass",
"word",
"swar",
};
Func<string, bool> Validator = (password) =>
!invalidPaswords.Any(regex => regex.IsMatch(password));
string report = string.Join(Environment.NewLine, tests
.Select(test => $"{test,-20} : {(Validator(test) ? "OK" : "Invalid")}"));
Console.Write(report);
Результат:
MyPassWord : Invalid
PassWord : Invalid
PassWord@123 : Invalid
PassWord@5678 : Invalid
It's_PassWord@5678 : Invalid
ABC123 : Invalid
123 : Invalid
1234 : Invalid
pass : OK
word : OK
swar : OK