Fiz uma validação de senhas no Front-End usando RegEx!

Overview

Seja bem vindo a um dos meus #JokeCodes

Nesse código vou te mostrar como fazer uma validação de senha no Front-End, com feedback na tela de login!, usando React e mais nadinha!

OBS: Nesse repositório também tem um Workflow para fazer auto-deploy de aplicações React

Login Gif

Como usar esse repositório?

Basta clonar o repositório para o seu computador, abrir a pasta, rodar npm install e depois rodar npm start para abrir o projeto no seu localhost:xxxx, e prontinho!

Como isso foi feito?

JSX

A primeira coisa é criar os elementos da tela, para esse login eu criei um título, dois campos, um de email e um de senha, e uma lista para armazenar os textos com o que a senha precisa ter pra ser válida.

    <div className='App'>
      <div className='Login'>
        <h3>Faça Login</h3>
        <div className='Login__inputs'>
          <input type={'email'} placeholder="Seu Email"></input>
          <div className='Password'>
            <input value={passValue} onChange={({target}) => {setPassValue(target.value)}} type={view ? 'text' : 'password'} placeholder="Sua Senha"></input>
            {view ? <AiFillEye className='icon' onClick={() => setView(!view)}/> : <AiFillEyeInvisible className='icon' onClick={() => setView(!view)}/>}
          </div>

          <ul className='Inputs__checks'>
            <li className={validated.length ? 'true' : 'false'}>Ter mais de 8 caracteres</li>
            <li className={validated.upper ? 'true' : 'false'}>Ter uma letra maiúscula</li>
            <li className={validated.lower ? 'true' : 'false'}>Ter uma letra minúscula</li>
            <li className={validated.special ? 'true' : 'false'}>Ter um caractere especial (%,&,*)</li>
            <li className={validated.number ? 'true' : 'false'}>Ter pelo menos um número</li>
          </ul>

          <button type={'button'} className='Inputs__button'>Enviar</button>
        </div>
      </div>
    </div>

Uma coisa interessante para aprender aqui é o botão de Mostrar/Ocultar a senha, eu fiz isso criado um state chamado view, quando esse state está true eu exibo o icone de um olho normal, e altero o campo de senha para o tipo text, e quando o state está false o campo de senha volta para o tipo password e o icone de um olho cortado aparece.

          <div className='Password'>
            <input value={passValue} onChange={({target}) => {setPassValue(target.value)}} type={view ? 'text' : 'password'} placeholder="Sua Senha"></input>
            {view ? <AiFillEye className='icon' onClick={() => setView(!view)}/> : <AiFillEyeInvisible className='icon' onClick={() => setView(!view)}/>}
          </div>

SCSS

Para esse projeto eu usei o SCSS, que me permite aninhar as classes assim como aninhamos componentes no JSX.

Javascript, finalmente!

Aqui que vem a magia, a primeira coisa para fazer essa validação é criar as validações, para isso, eu vou usar RegEx, da uma olhada:

const validations = {
  lower: new RegExp('(?=.*[a-z])'),
  upper: new RegExp('(?=.*[A-Z])'),
  number: new RegExp('(?=.*[0-9])'),
  special: new RegExp('(?=.*[!@#\$%\^&\*])'),
  length: new RegExp('(?=.{8,})')
}

Depois que eu criei um Objeto que armazena os RegEx de validação eu vou criar um Objeto que armazena se o resultado foi true ou falso de acordo com cada validação.

  const [validated, setValidated] = useState({
    lower: false,
    upper: false,
    number: false,
    special: false,
    length: false
  })

Agora vem a magia!

Usando o useEffect com passValue que é meu state que armazena o vlaor do input da senha como dependência do useEffect, eu vou fazer a validação da seguinte forma:

Antes de tudo, eu vou pegar o meu objeto que armazena se o resultado foi true ou falso, e vou criar uma cópia dele dentro do meu useEffect, para que eu possa alterar os valores direto no objeto sem usar a função de set do useState:

useEffect(() => {
    const tempValidated = validated;
    
    //...
    }, [passValue])

Primeiro, eu vou fazer um Map no Object.entries do meu objeto de validações:

Object.entries(validations).map((obj) => {
    // ...
})

Segundo, eu separo a key do valor RegEx:

Object.entries(validations).map((obj) => {
    // key vai ser por exemplo number
    const key = obj[0]
    // val vai ser por exemplo o RegEx de number que é /(?=.*[0-9])/
    const val = obj[1]
  
  // ...
})

Terceiro, e último, eu faço os testes! Para cada validação do objeto de validações, eu vou fazer um val.test(passValue) para verificar se a senha passa naquele RegEx:

      if(val.test(passValue)) {
        tempValidated[key] = true;
      } else {
        tempValidated[key] = false;
      }

E é assim que se faz!

Agora para finalizar, eu seto o meu objeto que salva os true e false das validações que está no useState, e o código fica assim:

  useEffect(() => {
    const tempValidated = validated;

    Object.entries(validations).map((obj) => {
      const key = obj[0]
      const val = obj[1]

      if(val.test(passValue)) {
        tempValidated[key] = true;
      } else {
        tempValidated[key] = false;
      }
    })

    setValidated(tempValidated);
  }, [passValue])
You might also like...

🔍 Remake of Reguleque's front-end, a search engine for government employees. Maintained by the América Transparente foundation.

regulf-react Frontend for Reguleque, a search engine for chilean public workers records' as obtained through transparency databases. Get started To ru

Dec 15, 2022

Uma simples pokédex que consome os dados da PokeAPI.

Uma simples pokédex que consome os dados da PokeAPI.

POKEDEX - Caio Almeida Uma pokedex consumindo os dados provindos da API pública: PokeAPI. Protótipo FIGMA Pokedex FIGMA Pré-requisitos Ter o NodeJS in

Dec 29, 2021

DashGo é uma aplicação em React para dashboard's em geral com paginas e paginação, login e sistema de inclusão de usuarios

DashGo é uma aplicação em React para dashboard's em geral com paginas e paginação, login e sistema de inclusão de usuarios

Ignite - Trilha ReactJS Sobre o projeto O projeto foi baseado no 4º módulo da trilha ReactJS do Ignite. Além do que foi construído na aula, foi criado

Nov 23, 2022

DashGo é uma aplicação em React para dashboard's em geral com paginas e paginação, login e sistema de inclusão de usuarios

DashGo é uma aplicação em React para dashboard's em geral com paginas e paginação, login e sistema de inclusão de usuarios

Ignite - Trilha ReactJS Sobre o projeto O projeto foi baseado no 4º módulo da trilha ReactJS do Ignite. Além do que foi construído na aula, foi criado

Nov 23, 2022

Podcastr é uma plataforma construída para transmissão de podcast.

Podcastr é uma plataforma construída para transmissão de podcast.

Podcastr 🎙️ 📝 Descrição Podcastr é uma plataforma construída para transmissão de podcast. Website: podcastr-evander.vercel.app 🚀 Tecnologias Esse p

Nov 10, 2022

Demo project to deploy front- and backend together on heroku.

spring-boot-react-bundle This is a demo project that shows how it is possible to deploy a react frontend and a Spring Boot backend into a heroku dyno.

Jul 22, 2022

Find your duo - front/back/mobile

Find your duo - front/back/mobile

Sobre Este projeto é a trilha Ignite que engloba o projeto (backend, frontend e mobile) Find Your Duo . Aulas 01 - Configuração do ambiente 02 - Desen

Sep 19, 2022

CoWIN Vaccination Tracker, Below is the PRODUCTION LINK this is updated at end of each day. To see any latest Updates, please check the documentation

CoWIN Vaccination Slots Checking App. CoWIN Vaccination Slots Checking App is a user-friendly website that allow users to find vaccine in nearby avail

Jan 28, 2022

The UI for staking NFTs on Solana. Cardinal staking UI can be treated as an admin interface for stake pools hosted by cardinal-staking as well as a barebones end-user staking UI

Cardinal Staking UI This repository hosts the UI inteface that powers https://stake.cardinal.so for staking NFTs on Solana. Use this repo to create an

Dec 24, 2022
Owner
JOÃO PSTER
Eu sou o Pster, sou um Desenvolvedor Full-Stack e estou em busca do meu primeiro emprego!
JOÃO PSTER
Would You Rather App (Front End Developer Udacity Nanodegree)

Would You Rather App Table of Contents Overview Built with Install (How it works) Overview Would You Rather is the Second project with React Redux in

Ahmed Bayoumi 1 Apr 28, 2022
Bookstore CMS React Front-End to display a list of books, categorize it, add and remove books and update your reading progress

Bookstore REACT app to manage your books Build an app to display a list of books, categorize it, add and remove books and update your reading progress

Eapen Zacharias 3 Aug 19, 2022
Grid-tool - Small tool that allows you to integrate a predefined or generated grid into your front-end development environment.

Grid tool Small tool that allows you to integrate a predefined or generated grid into your front-end development environment. Tool installation includ

hmongouachon 2 Jan 4, 2022
A personal project, made with React, React Native, Typescript and some of the most used front-end libraries.

A personal project, made with React, React Native, Typescript and some of the most used front-end libraries.

Alvaro Junior 1 Jul 23, 2022
Getir.com-react-tailwind - Getir.com anasayfa react + tailwind front-end

Getir.com React + Tailwind Front-end Bir gece uğraşı olarak getir.com'un anasayf

Tayfun Erbilen 102 Dec 17, 2022
A boilerplate for kickstarting my projects with Django backend and React front-end

Django-React-Boilerplate This is a boilerplate for kickstarting my projects with Django backend and React front-end. (AND, PostgreSQL) as the database

Mehedi Shafi 5 Apr 14, 2022
Next JS micro front-end project

a project to create micro frontend nextjs app in seconds!

Amirreza 4 Sep 1, 2022
Front-end code for teia

Teia UI This repository is the frontend code of the open, community owned Tezos NFT Platform teia.art. Teia is a fork of the Tezos NFT platform Hic et

Teia Community 21 Dec 2, 2022
This is full stack todo Application which has front end and backend side on my own. So you can try this out. Build using

Full Stack Todo Application Hello Everyone... Here I am sharing some information about the TODO APP which I build using React, Redux, Material UI, Exp

Nayan Ingale 5 Nov 8, 2022
OpenMaze landing page front-end

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

OpenMaze 6 Dec 15, 2022