Regex para atender aos requisitos de senha

0

Eu preciso de uma expressão regular para atender aos critérios de uma política básica de senha.

1º caractere é uma capital termina com 2 dígitos tem 8 caracteres de comprimento

Aqui está o que eu tenho até agora.

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

Ele atende aos critérios que eu quero, e. Passwo12 mas também corresponde a

Passw123 (unacceptable)
Pa234567 (unacceptable)

Eu quero que seja restrito a especificamente [capital] [minúscula [a-z] x5] [dígito x2]

    
por Matt 09.01.2018 / 21:04

2 respostas

2

Eu sugeriria algo como:

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

ou com [[ .. ]] condicional do Bash:

[[ $pass =~ ^[[:upper:]][[:lower:]]{5}[[:digit:]]{2}$ ]] && echo OK
    
por 09.01.2018 / 21:10
0

Faça um teste para cada critério, o que facilitará a manutenção e a extensão.

  1. O primeiro caractere é uma letra maiúscula: ^[[:upper:]]
  2. Os últimos dois caracteres são dígitos: [[:digit:]][[:digit:]]$
  3. O comprimento é de 8 caracteres: ^.{8}$
  4. Outros caracteres são minúsculos (não explicitamente declarados): ^.[[:lower:]]*..$

Com sed (somente será permitido o uso de senhas correspondentes aos critérios acima):

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

Dessa forma, você pode facilmente adicionar outros critérios ou modificar os existentes (mais ou menos) independentemente dos outros.

O -r é para permitir a expressão regular estendida no critério nº 3.

sed coisa que irá comentar sobre as formas como as senhas não cumprem os critérios:

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

Você não pode fazer isso se colocar tudo em uma única expressão regular ...

    
por 10.01.2018 / 14:42