using System.Collections.Generic;
using System.Text.RegularExpressions;
public static void Main()
var passwords = new string[] {"Admin@123", "123#xxxx", "%%WERT32","aaaaa123456"};
foreach(var pass in passwords){
Console.WriteLine("Trying pass ("+pass+") ...");
List<string> resultList = MeetsPasswordPolicy(pass);
if(resultList == null || resultList.Count == 0)
Console.WriteLine("No issues");
Console.WriteLine("Found ("+resultList.Count+") issues");
var res = string.Join(", ", resultList.ToArray());
Console.WriteLine("-- "+res);
Console.WriteLine("-----------------------------------------");
public static List<string> MeetsPasswordPolicy(string password)
List<string> issues = new List<string>();
var hasNumber = new Regex(@"[0-9]+");
var hasUpperChar = new Regex(@"[A-Z]+");
var hasMinChars = new Regex(@".{8,}");
var hasLowerChar = new Regex(@"[a-z]+");
var hasSymbols = new Regex(@"[!@#$%^&*()_+=\[{\]};:<>|./?,-]");
if (!hasLowerChar.IsMatch(input))
issues.Add("MustHasLowerChar");
if (!hasUpperChar.IsMatch(input))
issues.Add("MustHasUpperChar");
if (!hasMinChars.IsMatch(input))
issues.Add("MustHasMinChars");
if (!hasNumber.IsMatch(input))
issues.Add("MustHasNumber");
if (!hasSymbols.IsMatch(input))
issues.Add("MustHasSymbols");