強力なパスワードを作成する必要があるという要件に取り組んでいます。次の条件を満たす必要があります:
->大文字、小文字、数字、および特殊文字の組み合わせであること
これの正規表現を書くことはできますか? はいの場合、どのように?
強力なパスワードを作成する必要があるという要件に取り組んでいます。次の条件を満たす必要があります:
->大文字、小文字、数字、および特殊文字の組み合わせであること
これの正規表現を書くことはできますか? はいの場合、どのように?
たとえば、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))
あまり。正規表現は、文字列を生成するためではなく、文字列を検索/解析するために設計されています。おそらく何らかの方法でそれらを利用することは可能ですが、コードのルートは正規表現に依存することはできません (または少なくともすべきではありません)。
正規表現を使用して、特定のパスワードが一連の要件を満たしていることを検証できます (つまり、既に生成されたパスワードが強力かどうかを確認します)。したがって、考えられる戦略の 1 つは、ランダムなパスワードを生成し、パスワードが強力であると検証されるまで試行し続けることです。それは非常に悪い考えです。最初から常に強力なパスワードを生成するように生成アルゴリズムを作成する方がはるかに優れています。
正規表現を使用してユーザーが生成したパスワードを検証できるかどうかという質問がある場合は、それに応じて質問を変更してください。その場合、答えは「はい」です。
FormsAuthentication を使用している場合はpasswordStrengthRegularExpression
、プロバイダーを構成するときにプロパティを使用してみてください。
http://msdn.microsoft.com/en-us/library/ms998347.aspx#paght000022%5Fsqlmembershipproviderconfig
はい。メソッドを使用し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,"[!@#\$%\^&\*\(\)]"))
このための正規表現を書くことができ、実質的に何でもできます。
これでうまくいくと思います:
^.*(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&+=]).*$
私は自分のプロジェクトでこれを使用しましたが、次のように強くお勧めする長さの要件を追加しました。
^.*(?=.{10,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&+=]).*$