регулярное выражение для пароля - PullRequest
0 голосов
/ 10 августа 2009

Пожалуйста, кто-нибудь может дать мне регулярное выражение для пароля со следующими правилами.

Пароль должен содержать не менее 7 символов. Он должен содержать минимум 3 цифры и один буквенный символ. Пароль может принимать цифры, алфавиты, специальные символы любое количество раз, кроме цифр должно быть минимум 3.

Ответы [ 5 ]

8 голосов
/ 10 августа 2009

Регулярные выражения не особенно хороши для того, чтобы определенные группы символов появлялись определенное количество раз. Хотя это, вероятно, возможно - это, без сомнения, будет запутанным и неочевидным.

Если вы программируете на .NET (C # или VB), вы можете использовать простую функцию проверки, например:

bool ValidatePasswordCompliance( string password )
{
    int countDigits = 0;
    int countAlpha  = 0;
    int countOthers = 0;
    foreach( char c in password )
    {
         countDigit += c.IsDigit ? 1 : 0;
         countAlpha += c.IsAlpha ? 1 : 0;
         countOther += !(c.IsAlpha || c.IsDigit) ? 1 : 0;
    }
    return countDigits >= 3 && (countDigits + countAlpha + countOthers) >= 7;
}

Если вы работаете с .NET 3.5 или выше, вы можете использовать LINQ, чтобы упростить это:

bool ValidatePasswordCompliance( string password )
{
    return password.Count() >= 7 &&
           password.Count( x => x.IsDigit ) >= 3;
}
4 голосов
/ 10 августа 2009

Это лучше подходит для функции проверки, которая проверяет ваши индивидуальные критерии один за другим, чем слишком сложное регулярное выражение.

Если вы склонны к использованию регулярных выражений, взгляните на этот почти идентичный вопрос ... но прочитайте ответ с наибольшим количеством голосов, а не только принятый.

2 голосов
/ 10 августа 2009

Регулярные выражения, хотя и элегантны, если все сделано правильно, не подходят для всех целей. Я бы предположил, что это один из случаев, к которому он не подходит.

Не поймите меня неправильно, вы можете сделать это с одним RE, но он, вероятно, будет гораздо более сложным и сложным в обслуживании, чем какая-то простая процедурная процедура, которая проверяет длину и классы символов.

1 голос
/ 10 августа 2009

Тем не менее, есть люди, которые на самом деле делают это с помощью регулярных выражений (хотя они тоже признают, что это сложно)

http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256C4F005D3717

0 голосов
/ 10 августа 2009

Вы можете легко проверить сложность с помощью регулярных выражений, но это еще не конец ...

Хорошая статья о настройке различных сложностей, которые вы ищете:

http://www.zorched.net/2009/05/08/password-strength-validation-with-regular-expressions/

Возможно, вы захотите запустить пароль для простого словаря, чтобы проверить, можно ли его обойти путем атаки по словарю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...