В качестве альтернативы RegEx, вы рассмотрели только основные строки синтаксического анализа? Другими словами, если вам нужна помощь в написании RegEx, что произойдет с ремонтопригодностью с течением времени?
Простой синтаксический анализ для большинства из нас гораздо легче понять. Те, которые следуют по нашим стопам, будут намного легче понимать код и добавлять другие требования.
Вот пример использования синтаксического анализа, который самодокументирован, даже без сообщений об ошибках.
/// <summary>
/// Determines whether a password is valid.
/// </summary>
/// <param name="password">The password.</param>
/// <returns>A Tuple where Item1 is a boolean (true == valid password; false otherwise).
/// And Item2 is the message validating the password.</returns>
public Tuple<bool, string> IsValidPassword(string password)
{
if(password.Contains(" "))
{
return new Tuple<bool, string>(false, "Password cannot contain white spaces.");
}
if(!password.Any(char.IsNumber))
{
return new Tuple<bool, string>(false, "Password must contain at least one numeric char.");
}
// perhaps the requirements meant to be 1 or more capital letters?
// if(!password.Any(char.IsUpper))
if(password.Count(char.IsUpper) != 1)
{
return new Tuple<bool, string>(false, "Password must contain only 1 capital letter.");
}
if(password.Length < 8)
{
return new Tuple<bool, string>(false, "Password is too short; must be at least 8 characters (15 max).");
}
if(password.Length > 15)
{
return new Tuple<bool, string>(false, "Password is too long; must be no more than 15 characters (8 min).");
}
return new Tuple<bool, string>(true, "Password is valid.");
}
Из-за любопытства, почему вы запретили бы пробелы? –
Кроме того, почему вы закрываете его до 15 символов? Если вам нужно это сделать, сделайте хотя бы 40 символов. –