4

強力なパスワードを作成する必要があるという要件に取り組んでいます。次の条件を満たす必要があります:
->大文字、小文字、数字、および特殊文字の組み合わせであること

これの正規表現を書くことはできますか? はいの場合、どのように?

4

5 に答える 5

6

たとえば、8 文字以上のパスワードを検証するには、次のようにします。

if (Regex.IsMatch(subjectString, 
    @"^               # Start of string
    (?=.*\p{Lu})      # Assert at least one uppercase letter
    (?=.*\p{Ll})      # Assert at least one lowercase letter
    (?=.*\d)          # Assert at least one digit
    (?=.*[^\p{L}\d])  # Assert at least one other character
    .{8,}             # Match at least 8 characters
    $                 # End of string",             
    RegexOptions.IgnorePatternWhitespace))
于 2012-09-21T19:48:05.673 に答える
2

あまり。正規表現は、文字列を生成するためではなく、文字列を検索/解析するために設計されています。おそらく何らかの方法でそれらを利用することは可能ですが、コードのルートは正規表現に依存することはできません (または少なくともすべきではありません)。

正規表現を使用して、特定のパスワードが一連の要件を満たしていることを検証できます (つまり、既に生成されたパスワードが強力かどうかを確認します)。したがって、考えられる戦略の 1 つは、ランダムなパスワードを生成し、パスワードが強力であると検証されるまで試行し続けることです。それは非常に悪い考えです。最初から常に強力なパスワードを生成するように生成アルゴリズムを作成する方がはるかに優れています。

正規表現を使用してユーザーが生成したパスワードを検証できるかどうかという質問がある場合は、それに応じて質問を変更してください。その場合、答えは「はい」です。

于 2012-09-21T19:42:56.363 に答える
1

FormsAuthentication を使用している場合はpasswordStrengthRegularExpression、プロバイダーを構成するときにプロパティを使用してみてください。

http://msdn.microsoft.com/en-us/library/ms998347.aspx#paght000022%5Fsqlmembershipproviderconfig

于 2012-09-21T19:43:09.983 に答える
1

はい。メソッドを使用しSystem.Text.RegularExpressions.Regex.IsMatch(string input,string pattern)ます。

if( Regex.IsMatch(pw,"[a-z]") &&
    Regex.IsMatch(pw,"[A-Z]") &&
    Regex.IsMatch(pw,"[0-9]") && 
    Regex.IsMatch(pw,"[!@#\$%\^&\*\(\)]"))
于 2012-09-21T19:50:38.353 に答える
1

このための正規表現を書くことができ、実質的に何でもできます。

これでうまくいくと思います:

^.*(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&+=]).*$

私は自分のプロジェクトでこれを使用しましたが、次のように強くお勧めする長さの要件を追加しました。

^.*(?=.{10,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&+=]).*$

http://www.regular-expressions.info/reference.html

于 2012-09-21T20:03:05.590 に答える