0
respostas

[Projeto] Validando senhas com Regex

Olá!

Segue minha resolução:

  • Classe senha que contém o método para validar a senha e a confirmação. Inclui uma etapa a mais na expressão regex que não aceita o mesmo caractere duas vezes consecutivas. Além disso, inclui um método para confirmação de senha, muito comum ao cadastrarmos senhas em sites e aplicativos:
package br.com.alura.exercicios;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Senha {

    private String senha;
    private String confirmacao;

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public void setConfirmacao(String confirmaSenha) {
        this.confirmacao = confirmaSenha;
    }

    private static final Pattern PATTERN = Pattern.compile("^(?=.*\\d)" +
            "(?=.*[a-z])(?=.*[A-Z])" +
            "(?=.*[$*&@#])(?:" +
            "([0-9a-zA-Z$*&@#])" +
            "(?!\\1)){8,}$");

    public static boolean validarSenha(String senha){
        Matcher matcher = PATTERN.matcher(senha);
        return matcher.matches();
    }

    public static boolean confirmaSenha(String senha, String confirmacao){
       return senha.equals(confirmacao);
    }
}
  • Main para rodar a aplicação:
package br.com.alura.exercicios;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        Senha senha = new Senha();
        String valor = "";
        while (true){
            System.out.println("Digite a senha: ");
            valor = sc.nextLine();
            senha.setSenha(valor);
            if (!Senha.validarSenha(valor)){
                System.out.println("Senha inválida! Tente novamente: ");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            } else {
                System.out.println("Senha válida!");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                break;
            }
        }
        while (true){
            System.out.println("Favor confirmar a senha: ");
            String confirma = sc.nextLine();
            senha.setConfirmacao(confirma);
            if (!Senha.confirmaSenha(valor, confirma)){
                System.out.println("As senhas são diferentes! Tente novamente:  ");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            } else {
                System.out.println("Senha confirmada!");
                break;
            }
        }

    }
}
  • Tomei a liberdade de incluir um delay de 1 segundo entre cada scanner para facilitar a visualização de cada etapa da aplicação.