1. ホーム
  2. c#

[解決済み] パスワードが「大文字1文字、特殊文字1文字、英数字を含む8文字」であるかどうかをチェックする正規表現

2022-09-30 19:39:24

質問

以下のことを確認するための正規表現が必要です。

パスワードは、大文字1文字、特殊文字1文字、英数字を含む8文字でなければならない。

そしてこれが私の検証式です。大文字1つ、小文字1つ、数字または特殊文字1つを含む8文字である必要があります。

(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"

大文字1文字、特殊文字1文字、英数字を含む8文字のパスワードの場合、どのように書けばよいのでしょうか?

どのように解決するのですか?

正規表現は巨大になる可能性が高く、特に正規表現にあまり慣れていない人にとっては、維持するのが悪夢のようなものです。

正規表現を分解して、一度に少しずつ行う方が簡単だと思います。実行するのに少し時間がかかるかもしれませんが、メンテナンスとデバッグがより簡単になることは間違いありません。また、この方法によって、ユーザに対してより直接的なエラーメッセージを提供できるようになります (単に Invalid Password 以外の)より直接的なエラーメッセージを提供できるようになり、ユーザーエクスペリエンスが向上するはずです。

私が見ている限り、あなたは正規表現にかなり堪能なので、あなたが必要とすることを行うために正規表現を与えることは無駄であると推測されます。

あなたのコメントを見て、私はこのようにします。

  • 8 文字でなければならない 長さ: 正規表現は必要ありません。このために .Length プロパティを使用すれば十分です。

  • 大文字1文字を含む。大文字と小文字を区別するために [A-Z]+ という正規表現を使うことができます。文字列が少なくとも一つの大文字を含んでいる場合、この正規表現は true .

  • 特殊文字1つ。のどちらかを使用することができます。 \W を使うと、文字や数字以外のあらゆる文字にマッチします。 [!@#] を使って、特殊文字のリストを指定することができます。しかし、次のような文字は $ , ^ , () は正規表現言語の特殊文字なので、このようにエスケープする必要があります。 \$ . ですから、要するに \W .

  • 英数字を を使うことで \w+ を使用すると、任意の文字と数字、アンダースコアにマッチするはずです。

を見てみましょう。 この チュートリアルをご覧ください。