-1

これらのルールを満たすために、パスワードを検証する必要があります

A) パスワードには、次の 4 つのクラスのうち 3 つの文字が含まれている必要があります。

  1. 英語の大文字 A、B、C、... Z
  2. 英語の小文字 a、b、c、... z
  3. 西洋化されたアラビア数字 0、1、2、... 9
  4. 英数字以外 (「特殊文字」) 句読点、記号など。{},.<>;:'?/|`~!@#$%^&*()_-+= スペース

B) パスワードは 8 文字以上にする必要があります。

これは単一の正規表現で実行できますか。その正規表現は何でしょうか?

4

4 に答える 4

5

このタスクは、正規表現で行うのには適していません。

正規表現で行うこともできますが、非常に複雑で複雑になるため、他の方法でチェックを行う方がよいでしょう。

正規表現で何かができるからといって、それが良い考えであるとは限りません。

于 2013-08-30T10:01:37.487 に答える
0

次のことを確認できます。

  • 純粋に数字と英数字ではありません(これは、条件が言うよりも少し積極的です)。
  • 純粋な小文字や特殊文字ではありません

これを確認する単一の正規表現は次のようになります。

(?![A-Za-z0-9]+$|[a-z{},.<>;:'?/|`~!@#$%^&*()_-+= -]+$).{8,}

あなたの正確な仕様を意図的に無視しました。特に、私は を許可したくPass1234ありませんでした。また、最大長を設定するのは意味がないと思います。また、許可される文字のセットをまったく制限しませんでした (つまり、最小要件はありますが、暴走してもかまいません。必要に応じて、制御文字またはアクセント付き文字を使用してください)。これらのことは、同意しない場合でも簡単に修正できます。

仕様を厳密に実装するには、パスワードが純粋に任意の 2 つのグループで構成されていないことを確認できます。すべての大文字と小文字、すべての小文字と数字、すべての大文字と数字、すべての数字と特殊文字、すべての小文字と特殊文字、すべての大文字と特殊文字ではありませんが、繰り返しますが、これはやや面倒です。そして私見は逆効果です。

使用している正規表現のフレーバーを言っているのではありません。Perl の否定先読み(?!...)を自由に使用できると想定しています。従来の BRE または ERE 構文に制限されている場合、これは非常に困難です。

于 2013-08-30T10:30:47.753 に答える
0

複雑な正規表現の使用は、絶対に使用すべき方法ではないと思います。この場合、4 つのブール値を持つ単純なメソッドを使用すると、書き込みと読み取りが容易になり、おそらく高速になります。

于 2013-08-30T10:03:11.550 に答える