自分の考えを確認し、コミュニティと共有したい..
Active Directory パスワードの正規表現は、パスワードが
- 長さは 6 文字以上です
- 英大文字 (A から Z) を含む
- 英語の小文字 (a から z) を含む
- 基数 10 の数字 (0 から 9) を含む
- アルファベット以外の文字を含む (!、$、#、% ...)
- ユーザーのアカウント名またはユーザーのフルネームの一部が連続する 2 文字を超えていないこと
最初の 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
ますか?