정규 표현식이 비밀번호 요구 사항을 충족합니다.

정규 표현식이 비밀번호 요구 사항을 충족합니다.

기본 비밀번호 정책 기준을 충족하는 정규식이 필요합니다.

첫 번째 문자는 대문자이고 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. 마지막 두 문자는 숫자입니다. [[: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

정규식에 모든 것을 집어넣으면 이 작업을 수행할 수 없습니다...

관련 정보