肯定的な見通しはある程度理解する。
X(?= Y)は、「Xを探しますが、Yが後ろにある場合にのみ一致します」を意味します。
しかし、以下の正規表現では、正規表現の冒頭で肯定的な予測の重要性を理解していません。
^(?:(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))(?!.*(.)\1{2,})
肯定的な予測が最初に何をしているのか、上記の正規表現が何をしているのかを説明できる人はいますか?
編集する- 役に立つなら、完全正規表現は次のようになります。 -
^(?:(?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))(?!.*(.)\1{2,})[A-Za-z0-9]{8,64}$
完全正規表現は、大文字、小文字、数字、および8から64文字の長さを含む文字列と一致する必要があります。
答え1
あなたの^(?:(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))(?!.*(.)\1{2,})
正規表現は次のとおりです
^(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9])(?!.*(.)\1{2,})`
より正規表現のデモ。
ここでプレビューするには、改行文字以外のゼロ個以上の文字の後に特定の?=
パターンがあるか( )ない( )が必要です。?!
これは一般的なパスワードチェック正規表現です。
^
各フォワードチェックを実行するのに十分なので、アンカー文字列startの後に使用されます。一度文字列の先頭に。ツアーは幅0のアサーションなので、4つのツアーはすべて文字列の先頭で1つずつトリガーされます。
一致する
^
- 文字列の始まり(?=.*\d)
- 改行文字を除く0個以上の文字の後には少なくとも1つの数字が続く必要があります。(?=.*[A-Z])
- 改行以外のゼロ個以上の文字の後には、少なくとも1つ以上の大文字のASCII文字が続く必要があります。(?=.*[^A-Za-z0-9])
- 改行文字以外の0個以上の文字の後には、ASCII英数字以外の文字が1つ以上でなければなりません。(?!.*(.)\1{2,})
- 改行文字以外の0個以上の文字の後には、改行文字以外の同じ文字の3個以上の連続文字が続くことはできません。
正規表現関数に完全な文字列一致が必要な場合があるため、.*
これはパターンの最後に必要な場合があります。
2番目の正規表現は実際には次のようになります^(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?!.*(.)\1{2,})[A-Za-z0-9]{8,64}$
。この正規表現のデモと説明。使用されている - パターン部分はASCII文字または数字のみに一致し、ASCII英数字以外の文字と一致しないため、すべての代替項目は(?=.*[^A-Za-z0-9])
絶対一致しません。[A-Za-z0-9]{8,64}