2013-06-26 72 views
-1

想确认,并与社区分享我的想法..定期为Active Directory密码表达

的Active Directory密码的正则表达式应验证密码

  1. 的长度
  2. 至少六个字符
  3. 包含英文大写字母(A到Z)
  4. 包含英文小写字母(a到z)
  5. 包含Base 10 digi TS(0-9)
  6. 包含非字母字符(!,$,#%......)
  7. 不包含超过两个连续字符的用户的帐户名或用户的全名的部分

前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

+0

你有'{8,255}',你的第一个要求是'至少有六个字符的长度.....'非字母字符'和'字母数字字符'变成'.'..所以为什么要用这个**巨大的**正则表达式.. – Anirudha

+0

Anirudh,yep我同意你能否提供你的代码版本? –

+0

我已经提供了代码 – Anirudha

回答

2

正则表达式是一个很好的工具,但不解决所有问题。例如,正则表达式不能计算您需要的意义。是的,正则表达式可以计算例如连续的字母,但它不能检查你是否有两个和其他三个,分布在整个输入字符串中。这也适用于您的具体问题。具体而言,在同一正则表达式中检查这两个不同的条件可能会变得非常困难。

在这种情况下,我会建议不要使用正则表达式,只写一个执行所有检查的小算法。用这种方法获得的另一个优点是,当凡人稍后再次访问时,只有凡人才能理解你的算法。总是一个额外的好处。

+0

我同意将它分成几个步骤会更简单明了。但我需要将它作为正则表达式传递给第三方组件。我不同意Regex无法解决它。 –

0

你的第5和第一个要求将导致进入这个表达式

^.{6,}$ 

为了您的第六届要求,

考虑您的帐户名称为accountName

input是你的目标输入密码

bool isNotValid= Regex.Matches(accountName,"(?=(..))")//capturing two consecutive characters of account name 
         .Cast<Match>() 
         .Select(m=>m.Groups[1].Value)//two consecutive character's list 
         .Any(y=>input.IndexOf(y)!=-1); 

Cap图灵的两个连续字符是捕捉两个以上的连续字符

我已经使用(?=(..))捕捉两个连续characters.This将heellllo从打招呼捕捉好。

相关问题