デフォルトのパスワードポリシー基準を満たす正規表現が必要です。
最初の文字は大文字で、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
各標準を一度だけテストすると、メンテナンスと拡張が容易になります。
- 最初の文字は大文字です。
^[[:upper:]]
- 最後の2文字は数字です。
[[:digit:]][[:digit:]]$
- 長さは8文字です。
^.{8}$
- 他の文字は小文字です(明示的に指定されていません)。
^.[[: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
正規表現にすべてを入れると、これを行うことはできません...