想与社区确认并分享我的想法..
Active Directory 密码的正则表达式应验证密码
- 长度至少为六个字符
- 包含英文大写字符(A 到 Z)
- 包含英文小写字符(a 到 z)
- 包含 Base 10 位数字(0 到 9)
- 包含非字母字符(!、$、#、% ...)
- 不包含用户的帐户名或用户全名超过两个连续字符的部分
前 5 个条件很简单。
我发现这应该适用于 1-5 个条件:
(?=^.{8,255}$)((?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*
但是如何添加条件 6 - 否定名称和登录?
我是这样看的:
首先得到禁止的东西:
String enter = fullname + login;
List<string> Negative = new List<string>();
for (int i = 0; i < enter.Length; i += 3)
{
if (i + 3 > enter.Length)
{
enter.Substring(i, 3);
Negative.Add(enter.Substring(i, 3));
}
}
然后构建正则表达式:
StringBuilder pattern = new StringBuilder("(?=^.{8,255}$)((?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))");
foreach(string word in Negative)
{
pattern.Append("(/^((?!" + word + @")[\s\S])*$/)");
}
pattern.Append("^.*");
该模式现在应该是所需的正则表达式。
我主要关心的是这行代码:
pattern.Append("(/^((?!" + word + @")[\s\S])*$/)");
它会添加否定条件word
吗?