2

わかりましたので、文字列(入力されたパスワード)を正規表現でpreg_matchしようとしていますが、インターネットで正規表現情報を何時間も読んだり見たりした後でも、まだ理解できません..

私は現在持っています:
'/^[AZ]^[az]+$/'

パスワードは次の条件を満たしている必要があります。

8 ~ 16 文字にしてください。
少なくとも 1 つの大文字
を含む 少なくとも 1 つの小文字
を含む 少なくとも 1 つの数字を含む

上記のすべての要件だけでなく
、少なくとも 1 つの記号を含む正規表現も含めることができる場合

私自身の学習に感謝します。私が理解できるように、正規表現を説明してみてください。ありがとう!

4

1 に答える 1

7
  1. 8〜16文字:

    ^.{8,16}$
    
  2. 少なくとも1つの大文字

    (?=.*[A-Z])
    
  3. 少なくとも1つの小文字

    (?=.*[a-z])
    
  4. 少なくとも1つの番号

    (?=.*\d)
    

それを一緒に入れて:

^(?=.*[A-Z])(?=.*[a-z])(?=.*\d).{8,16}$

Unicode対応のバリアントが必要な場合(おそらくPHPでは無駄です):

^(?=.*\p{Lu})(?=.*\p{Ll})(?=.*\p{Nd}).{8,16}$

これは、最初にいくつかの肯定的な先読みアサーションを設定することで機能します。各アサーションは、文字列の1つの目的のプロパティをチェックします。先読みアサーションは、括弧内の部分がこの位置で一致するかどうかをチェックしますが、文字列内の実際の一致位置を進めません。ここでの実際の一致は、長さが要件に一致することを確認するだけです。

ただし、これは基本的に、各プロパティをチェックするいくつかの正規表現の一致と計算上同じである必要があることに注意してください。単一の正規表現にパッケージ化されているだけです。

(?=.*[,.!?])ああ、そしてあなたがシンボルと考えるものに応じて、少なくとも1つのシンボルを同様にまたは同様のものでチェックすることができます。

于 2012-10-16T12:47:03.453 に答える