サーチ…


少なくとも1つの大文字、1つの小文字、1つの数字、1つの特殊文字を含み、少なくとも10の長さを持つパスワード

文字/数字は文字列内のどこでもかまいませんので、先読みが必要です。ルックアヘッドのzero widthzero width 、文字列を消費しません。簡単な言い方をすれば、先読みの各条件が満たされた後、チェックの位置が元の位置にリセットされます。

前提 : - 単語以外の文字を特別なものとして考える

^(?=.{10,}$)(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*\W).*$

説明に進む前に、正規表現^(?=.*[az])動作していることを見てみましょう( 長さはここでは考慮されません )。文字列1$d%aA

ここに画像の説明を入力

画像クレジット : - https://regex101.com/

注目すべきこと

  • アンカータグ^ために文字列の先頭からチェックが開始されます。
  • 先読みの条件が満たされた後、チェックの位置が開始にリセットされています。

正規表現の内訳

^ #Starting of string
 (?=.{10,}$) #Check there is at least 10 characters in the string. 
             #As this is lookahead the position of checking will reset to starting again
 (?=.*[a-z]) #Check if there is at least one lowercase in string.
             #As this is lookahead the position of checking will reset to starting again
 (?=.*[A-Z]) #Check if there is at least one uppercase in string.
             #As this is lookahead the position of checking will reset to starting again
 (?=.*[0-9]) #Check if there is at least one digit in string.
             #As this is lookahead the position of checking will reset to starting again
 (?=.*\W) #Check if there is at least one special character in string.
          #As this is lookahead the position of checking will reset to starting again
.*$ #Capture the entire string if all the condition of lookahead is met. This is not required if only validation is needed

上記の正規表現の貪欲でないバージョンも使用できます

^(?=.{10,}$)(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[0-9])(?=.*?\W).*$

少なくとも2つの大文字、1つの小文字、2桁、および少なくとも10の長さのパスワード

これは、上の正規表現で少しの変更を加えて行うことができます

 ^(?=.{10,}$)(?=(?:.*?[A-Z]){2})(?=.*?[a-z])(?=(?:.*?[0-9]){2}).*$

または

 ^(?=.{10,}$)(?=(?:.*[A-Z]){2})(?=.*[a-z])(?=(?:.*[0-9]){2}).*

単純な正規表現^(?=(?:.*?[AZ]){2})が文字列abcAdefDどのように動作するかを見てみましょう

ここに画像の説明を入力

画像クレジット : - https://regex101.com/



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow