Сильный пароль regex [дубликат]

7
задан Maxim 28 June 2010 в 08:39
поделиться

3 ответа

^(?=.*[A-Z])(?=.*\d)(?!.*(.)\1\1)[a-zA-Z0-9@]{6,12}$
  • Специальные символы - не допускаются
  • Пробелы - не допускаются
  • Минимальная и максимальная длина поля - от 6 до 12 символов
    . [a-zA-Z0-9@]{6,12}
  • Числовой символ - не менее одного символа
    Встречается по положительному упреждению (?=.*\d)
  • Хотя бы одна заглавная буква
    (?=.*[A-Z])
  • Повторяющиеся символы - разрешено только два повторяющихся символа
    Я не совсем понимаю, что вы имеете в виду. Отрицательное опережение (?!.*(.)\1\1) следит за тем, чтобы ни один символ не появлялся более двух раз подряд. Подстрока aa подходит, aaa - нет.
    Сделайте (?!.*(.+)\1\1), чтобы отбрасывать повторяющиеся подстроки длиной более одной (например, ababab) или добавьте .* перед \1, чтобы отбрасывать и не повторяющиеся.
25
ответ дан 6 December 2019 в 04:46
поделиться

Не похоже на задачу, особенно подходящую для Regex, поскольку вы хотите проверить несколько условий одновременно. (Вы можете использовать несколько регексов, но тогда обычный C# с LINQ - более приятный способ тестирования). Попробуйте следующую функцию:

public static bool IsStrongPassword(string password)
{
    // Minimum and Maximum Length of field - 6 to 12 Characters
    if (password.Length < 6 || password.Length > 12)
        return false;

    // Special Characters - Not Allowed
    // Spaces - Not Allowed
    if (!(password.All(c => char.IsLetter(c) || char.IsDigit(c))))  
        return false;

    // Numeric Character - At least one character
    if (!password.Any(c => char.IsDigit(c)))
        return false;

    // At least one Capital Letter
    if (!password.Any(c => char.IsUpper(c)))
        return false;

    // Repetitive Characters - Allowed only two repetitive characters
    var repeatCount = 0;
    var lastChar = '\0';
    foreach(var c in password)
    {
        if (c == lastChar)
            repeatCount++;
        else
            repeatCount = 0;
        if (repeatCount == 2)
            return false;
        lastChar = c;
    }

    return true;
}

Убедитесь, что вы импортировали System.Linq, и вы готовы к работе.

31
ответ дан 6 December 2019 в 04:46
поделиться

Вы можете выполнить поиск в библиотеке регулярных выражений

2
ответ дан 6 December 2019 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: