2011-01-06 2 views
2
\A(?=\S*?[A-Z])(?=\S*?[a-z])(?=\S*?[0-9])\S{6,}\z 

(これはregexpのJGSoftフレーバーに由来します)。誰でもこのパスワードの複雑さを私に説明してもらえますか?

基本的に、この正規表現の目的は、このている:「入力が6つの以上の文字から成る場合、パスワードの複雑 テスト 入力は、少なくとも一つの大文字一の小文字と一桁を含まなければなりません。」

したがって、任意の順序で配置できる3つのグループ(最初の大文字、次に非大文字、次に数字)があります。 \ Aは文字列の先頭に一致し、\ zは文字列の最後に一致します。私は一種の混乱しています(?=部分。これは正の先読みであると考えられていますが、この正規表現がどのような順序でパスワード文字を入力できるかはわかりません)

答えて

4

基本的な考え方のようにそれについて考える:。

  1. チェック少なくとも1つの大文字が(見ているだけで、進めません)があります:。スタートにしながら、テキストの先頭から

    1. ルック。
    2. 少なくとも1つの小文字があることを確認してください。
    3. 少なくとも1桁の数字があることを確認してください。
  2. 最後に6文字以上の空白文字を一致させてください。

ルック先読みがキャプチャされていません - あなたは(この場合は、スタート、)同じ場所にとどまる、とあなたはこの前方に一致することができているかどうかを確認 - 注文は

問題ではない理由です

ここでは、入力[email protected]の例を示します。

  1. \A - 文字列の先頭に一致します。すばらしいです。
  2. (?=\S*?[A-Z])-\S*?[A-Z][email protected]と一致し、(?=)アサーションが成功します。
  3. (?=\S*?[a-z]) - [email protected]と一致することができます。
  4. (?=\S*?[0-9]) - は1と一致します。
  5. \S{6,} - 34Abの最後に一致します(\z)。
1

先読みので

  1. 上部に続くゼロ以上なし ホワイトスペースがある 文字列の先頭からならば、それは試験することができる位置を変更することなく、パターンがある場合、私はテストすることを意味しますケース 後者。小文字後者続い ゼロ以上なし空白 がある場合

  2. それは、文字列の 先頭から再度チェックします。数値が続く ゼロ以上なし空白 がある場合

  3. それは、文字列の 最初からもう一度チェックします。

  4. 最後に、文字列が6 以上の空白文字かどうかを確認します。

第3の試験(大文字、小文字、数字)先読み - チェックが最後のテスト(6文字以上)の位置を変更することなく、文字列の先頭からでは位置を変えます。 先読みは、その名前がちょうど見て、順序は、すべての3が正である限りではないことが重要ですので、文字列の先頭から実行されているので、最初の3のテストを移動せずに来るものを参照してください言うです

関連する問題