這就是我想出了,因爲我需要得到的東西的工作,並沒有發現罐頭標準答案我正在尋找。爲了方便起見,我將它作爲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