기본 비밀번호 정책 기준을 충족하는 정규식이 필요합니다.
첫 번째 문자는 대문자이고 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:]]
- 마지막 두 문자는 숫자입니다.
[[: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
정규식에 모든 것을 집어넣으면 이 작업을 수행할 수 없습니다...