正規表現はパスワード要件を満たしています。

正規表現はパスワード要件を満たしています。

デフォルトのパスワードポリシー基準を満たす正規表現が必要です。

最初の文字は大文字で、2桁の数字で終わり、長さは8文字です。

これが私が今まで持っているものです。

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

たとえば、私が望む基準に一致しますPasswo12が、また一致します。

Passw123 (unacceptable)
Pa234567 (unacceptable)

具体的に制限したいです。[大文字] [小文字[az] x5] [数字x2]

答え1

私は次のことを提案します:

grep -E '^[[:upper:]][[:lower:]]{5}[[:digit:]]{2}$' input

または、Bashの[[ .. ]]条件文を使用してください。

[[ $pass =~ ^[[:upper:]][[:lower:]]{5}[[:digit:]]{2}$ ]] && echo OK

答え2

各標準を一度だけテストすると、メンテナンスと拡張が容易になります。

  1. 最初の文字は大文字です。 ^[[:upper:]]
  2. 最後の2文字は数字です。 [[:digit:]][[:digit:]]$
  3. 長さは8文字です。^.{8}$
  4. 他の文字は小文字です(明示的に指定されていません)。^.[[:lower:]]*..$

使用sed(上記の基準を満たすパスワードでのみ許可されています):

sed -r \
    -e '/^[[:upper:]]/!d' \
    -e '/[[:digit:]][[:digit:]]$/!d' \
    -e '/^.{8}$/!d' \
    -e '/^.[[:lower:]]*..$/!d'

これにより、他の規格を簡単に追加したり、他の規格に関係なく既存の規格を変更したりできます。

これは-r、標準#3で拡張正規表現を許可するためのものです。


sedパスワードの非標準的なコメントを作成する方法:

sed -r \
    -e '/^[[:upper:]]/!a\
No initial upper-case
' \
    -e '/[[:digit:]][[:digit:]]$/!a\
No trailing digits
' \
    -e '/^.{8}$/!a\
Not 8 characters
' \
    -e '/^.[[:lower:]]*..$/!a\
Not only lower-case middle chars

正規表現にすべてを入れると、これを行うことはできません...

関連情報