Regular Expressions
パスワード検証正規表現
サーチ…
少なくとも1つの大文字、1つの小文字、1つの数字、1つの特殊文字を含み、少なくとも10の長さを持つパスワード
文字/数字は文字列内のどこでもかまいませんので、先読みが必要です。ルックアヘッドのzero width
はzero 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