Deo zbornika Učimo Javascript

Vežba: validacija formulara

Pomoću Javascripta implementiraj validaciju input polja za ime, email i lozinku. Kada korisnik klikne submit dugme, spreči podrazumevano slanje formulara, i validiraj podatke. Uslovi za validaciju su:

  • ime mora biti duže od 3 a kraće od 30 karaktera.
  • email mora sadržati @.
  • lozinka mora sadržati malo slovo, veliko slovo, broj, specijalan znak i biti minimalne dužine 8 polja.

Ako je unos validan, dodaj input polju klasu valid, a ako nije, klasu invalid. Klase implementiraj u CSS-u da imaju crvenu ili zelenu ivicu. Samo ako su svi podaci valjani, pošalji formular.

Bonus: proveravaj valjanost podataka pri svakoj promeni input polja.

<style>
label {
  display: block;
}
.valid {
  border: 2px solid green;
}
.invalid {
  border: 2px solid red;
}
</style>

<form id="forma">
  <label>
    Ime: <input id="ime">
  </label>
  <label>
    Email: <input id="email">
  </label>
  <label>
    Lozinka: <input id="lozinka">
  </label>
  <button>Pošalji</button>
</form>

<script>
const forma = document.getElementById('forma')
const ime = document.getElementById('ime')
const email = document.getElementById('email')
const lozinka = document.getElementById('lozinka')

const lozinkaRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d].{8,}$/
let sveoK = true

/* FUNKCIJE */

function proveriIme() {
  if (ime.value.length > 3 && ime.value.length < 30) {
    ime.classList.add('valid')
    ime.classList.remove('invalid')
  } else {
    ime.classList.add('invalid')
    ime.classList.remove('valid')
    sveoK = false
  }
}

function proveriEmail() {
  if (email.value.includes('@')) {
    email.classList.add('valid')
    email.classList.remove('invalid')
  } else {
    email.classList.add('invalid')
    email.classList.remove('valid')
    sveoK = false
  }
}

function proveriLozinku() {
  if (lozinkaRegex.test(lozinka.value)) {
    lozinka.classList.add('valid')
    lozinka.classList.remove('invalid')
  } else {
    lozinka.classList.add('invalid')
    lozinka.classList.remove('valid')
    sveoK = false
  }
}

/* DOGADJAJI */

ime.addEventListener('change', proveriIme)
email.addEventListener('change', proveriEmail)
lozinka.addEventListener('change', proveriLozinku)

forma.addEventListener('submit', (e) => {
  e.preventDefault()
  proveriIme()
  proveriEmail()
  proveriLozinku()
  if (sveoK) forma.submit()
})
</script>