这就是我想出了,因为我需要得到的东西的工作,并没有发现罐头标准答案我正在寻找。为了方便起见,我将它作为PasswordValidator类的扩展实现,尽管这不是必需的。
public static string ToDescription(this PasswordValidator validator)
{
var options = new List<string>();
if (validator.RequireUppercase) options.Add("upper-case letters");
if (validator.RequireLowercase) options.Add("lower-case letters");
if (validator.RequireDigit) options.Add("numbers");
if (validator.RequireNonLetterOrDigit) options.Add("special characters");
var result = "Passwords must be at least "
+ validator.RequiredLength + " characters long"
+ (options.Any() ? ", and include " + options.OxfordJoin() : ".");
return result;
}
我还添加了OxfordJoin扩展转向的需求列表到一个很好的格式化的一句话:
public static string OxfordJoin(this IEnumerable<string> source)
{
var array = source.ToArray();
var joined = string.Join(", ", array);
var result = (array.Length > 2)
? joined.ReplaceLast(",", ", and")
: joined.ReplaceLast(",", " and");
return result;
}
...最后一个“所以标准应该仅仅是在框架中已经” ReplaceLast执行:
public static string ReplaceLast(this string value, string oldValue, string newValue)
{
var position = value.LastIndexOf(oldValue, StringComparison.InvariantCultureIgnoreCase);
var result = (position > -1)
? value.Substring(0, position) + newValue + value.Substring(position + 1)
: value;
return result;
}
来源
2015-09-21 12:13:12
Mel
有趣,但我不确定我可以打电话给答案做的结果段落的不寻常的,有点不友好的措辞。我试图对大多数网站上看到的规则进行友好的解释。我很犹豫发布这个问题,假设有一百人会告诉我“使用Foo类,每个人都知道这个”,但是看起来这个问题没有标准答案。也许大多数网站可能只是将解释直接写入页面源代码。 – Mel
呃。 “......由于不寻常的......”当你编辑你的评论为时已晚时,你发现语法错误时你不讨厌吗? – Mel