← Back to course

Form e Validazione

Form e Validazione

Bentornato.

Nella lezione precedente hai imparato gli eventi.

Gli eventi aiutano JavaScript a reagire a click, digitazione, form e altre azioni dell’utente.

Molto utile.

Molto interattivo.

Molto “finalmente il pulsante fa qualcosa.”

Oggi continuiamo con una delle parti più importanti dello sviluppo web.

I form.

I form sono ovunque.

Form di contatto.

Form di login.

Campi di ricerca.

Iscrizioni alla newsletter.

Checkout.

Piccole caselle dove gli utenti scrivono il loro destino.

Ma gli utenti sono creativi.

Molto creativi.

Se chiedi un’email, qualcuno scriverà:

banana

Se chiedi un nome, qualcuno non scriverà niente.

Se chiedi una password, qualcuno scriverà:

123

E poi sarà sorpreso quando il sito dice no.

Per questo ci serve la validazione.

Validazione significa controllare i dati dell’utente prima di accettarli.

JavaScript ci aiuta a guidare l’utente prima di mandare i dati da qualche parte.

Come una guardia di sicurezza gentile.

Ma con i punto e virgola.

Cosa Imparerai

In questa lezione imparerai:

Alla fine di questa lezione saprai creare form che controllano i dati prima dell’invio.

Questo è un grande passo.

Perché form senza validazione sono come porte senza maniglie.

Tecnicamente presenti.

Emotivamente confuse.

Che Cos'è la Validazione di un Form?

La validazione di un form significa controllare se i dati inseriti dall’utente sono accettabili.

Esempio:

Il nome non deve essere vuoto.
L’email deve sembrare un’email.
La password deve essere abbastanza lunga.
Il messaggio deve contenere testo.

La validazione può avvenire in due posti:

In questa lezione ci concentriamo sulla validazione frontend con JavaScript.

Importante:

La validazione frontend migliora l’esperienza utente.

Ma non basta per la sicurezza.

Le applicazioni reali devono validare i dati anche nel backend.

Non fidarti mai solo del browser.

Il browser vive sul computer dell’utente.

E gli utenti hanno pulsanti.

Pulsanti pericolosi.

Crea il Progetto

Crea una cartella per questa lezione:

mkdir javascript-lesson9
cd javascript-lesson9
touch index.html
touch script.js

Il progetto dovrebbe essere così:

javascript-lesson9/
  index.html
  script.js

Apri la cartella nel tuo editor.

Oggi costruiremo un form, lo valideremo e mostreremo messaggi.

Piccolo progetto.

Grande lezione.

Il form è pronto.

Il caos aspetta.

Scrivi l'HTML

Apri index.html e aggiungi questo:

<!DOCTYPE html>
<html lang="it">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Form e Validazione</title>
</head>
<body>
  <h1>Form e Validazione</h1>

  <form id="signupForm">
    <label for="nameInput">Nome</label>
    <input id="nameInput" type="text" placeholder="Il tuo nome">

    <label for="emailInput">Email</label>
    <input id="emailInput" type="email" placeholder="tu@example.com">

    <label for="passwordInput">Password</label>
    <input id="passwordInput" type="password" placeholder="Almeno 6 caratteri">

    <button type="submit">Registrati</button>
  </form>

  <p id="message">Compila il form e invialo.</p>

  <script src="script.js"></script>
</body>
</html>

Questo ci dà:

Semplice.

Pulito.

Pronto a giudicare educatamente i dati dell’utente.

Selezionare il Form e gli Input

Apri script.js e aggiungi:

const signupForm = document.getElementById("signupForm");
const nameInput = document.getElementById("nameInput");
const emailInput = document.getElementById("emailInput");
const passwordInput = document.getElementById("passwordInput");
const messageElement = document.getElementById("message");

Ora JavaScript può accedere al form e agli input.

Queste variabili rappresentano elementi HTML.

Ma ricorda:

L’elemento input non è la stessa cosa del valore dentro l’input.

Questo:

nameInput

è l’elemento input.

Questo:

nameInput.value

è ciò che l’utente ha scritto.

Scatola.

Contenuto.

Cose diverse.

Come scatola della pizza e pizza.

Non mangiare la scatola.

Gestire il Submit del Form

Ora aggiungiamo un event listener per il submit.

function handleSignup(event) {
  event.preventDefault();

  console.log("Form inviato!");
}

signupForm.addEventListener("submit", handleSignup);

Aggiorna il browser.

Invia il form.

La pagina non dovrebbe ricaricarsi.

La console dovrebbe mostrare:

Form inviato!

Perché la pagina non si ricarica?

Perché abbiamo usato:

event.preventDefault();

Di default, i form ricaricano la pagina quando vengono inviati.

Ma noi vogliamo che JavaScript gestisca il form.

Quindi fermiamo il comportamento predefinito.

Senza preventDefault, la pagina si ricarica, il messaggio sparisce e la tua fiducia va a fare una passeggiata.

Leggere i Valori degli Input

Ora leggiamo i valori.

Aggiorna handleSignup:

function handleSignup(event) {
  event.preventDefault();

  const name = nameInput.value;
  const email = emailInput.value;
  const password = passwordInput.value;

  console.log(name);
  console.log(email);
  console.log(password);
}

Scrivi qualcosa nel form e invialo.

Dovresti vedere i valori nella console.

Questo è lo schema base:

const value = input.value;

Molto comune.

Molto importante.

Molto facile da dimenticare quando il cervello sta debuggando cinque cose insieme.

Validare Campi Vuoti

La prima regola di validazione è semplice.

I campi non devono essere vuoti.

Aggiorna handleSignup:

function handleSignup(event) {
  event.preventDefault();

  const name = nameInput.value;
  const email = emailInput.value;
  const password = passwordInput.value;

  if (name === "" || email === "" || password === "") {
    messageElement.textContent = "Compila tutti i campi.";
    return;
  }

  messageElement.textContent = "Il form sembra corretto!";
}

Ora invia il form vuoto.

Dovresti vedere:

Compila tutti i campi.

Il return è importante.

Ferma la funzione.

Se il form non è valido, mostriamo l’errore e ci fermiamo.

Non serve continuare.

Come vedere fumo in cucina e decidere di non preparare una torta proprio adesso.

Saggio.

Eliminare gli Spazi Vuoti con trim

C’è un problema.

Un utente può scrivere solo spazi:

     

Tecnicamente non è una stringa vuota.

Ma non è nemmeno un vero nome.

Quindi usiamo .trim().

Esempio:

const name = nameInput.value.trim();

.trim() rimuove gli spazi dall’inizio e dalla fine di una stringa.

Aggiorna il codice:

function handleSignup(event) {
  event.preventDefault();

  const name = nameInput.value.trim();
  const email = emailInput.value.trim();
  const password = passwordInput.value.trim();

  if (name === "" || email === "" || password === "") {
    messageElement.textContent = "Compila tutti i campi.";
    return;
  }

  messageElement.textContent = "Il form sembra corretto!";
}

Ora solo spazi non superano la validazione.

Bene.

Gli utenti sono creativi.

Ma noi stiamo imparando.

Validare l'Email

Un controllo email semplice può usare .includes().

Esempio:

if (!email.includes("@")) {
  messageElement.textContent = "Inserisci un’email valida.";
  return;
}

Questa non è una validazione email perfetta.

La validazione email può diventare sorprendentemente complicata.

Molto complicata.

Come aprire un cassetto e trovare un altro cassetto dentro.

Per principianti, controllare @ basta per capire l’idea.

Aggiorna la funzione:

function handleSignup(event) {
  event.preventDefault();

  const name = nameInput.value.trim();
  const email = emailInput.value.trim();
  const password = passwordInput.value.trim();

  if (name === "" || email === "" || password === "") {
    messageElement.textContent = "Compila tutti i campi.";
    return;
  }

  if (!email.includes("@")) {
    messageElement.textContent = "Inserisci un’email valida.";
    return;
  }

  messageElement.textContent = "Il form sembra corretto!";
}

Ora se l’utente scrive:

banana

JavaScript dice no.

Educatamente.

Ma con fermezza.

Validare la Lunghezza della Password

Ora controlliamo la lunghezza della password.

Esempio:

if (password.length < 6) {
  messageElement.textContent = "La password deve avere almeno 6 caratteri.";
  return;
}

Aggiungiamolo alla funzione:

function handleSignup(event) {
  event.preventDefault();

  const name = nameInput.value.trim();
  const email = emailInput.value.trim();
  const password = passwordInput.value.trim();

  if (name === "" || email === "" || password === "") {
    messageElement.textContent = "Compila tutti i campi.";
    return;
  }

  if (!email.includes("@")) {
    messageElement.textContent = "Inserisci un’email valida.";
    return;
  }

  if (password.length < 6) {
    messageElement.textContent = "La password deve avere almeno 6 caratteri.";
    return;
  }

  messageElement.textContent = "Il form sembra corretto!";
}

Ora il form controlla:

È già utile.

Non perfetto.

Ma utile.

Come una sedia con tutte e quattro le gambe.

Un buon inizio.

Aggiungere Stili Migliori

Ora rendiamo il form più bello.

Aggiorna index.html:

<!DOCTYPE html>
<html lang="it">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Form e Validazione</title>

  <style>
    body {
      font-family: Arial, sans-serif;
      max-width: 700px;
      margin: 60px auto;
      padding: 0 24px;
      background-color: #f3f4f6;
      color: #111827;
    }

    .card {
      background-color: white;
      padding: 24px;
      border: 2px solid #e5e7eb;
      border-radius: 18px;
    }

    h1 {
      font-size: 42px;
    }

    label {
      display: block;
      margin-top: 16px;
      font-weight: 700;
    }

    input {
      width: 100%;
      margin-top: 8px;
      padding: 12px;
      border: 2px solid #d1d5db;
      border-radius: 12px;
      font-size: 18px;
      box-sizing: border-box;
    }

    button {
      margin-top: 18px;
      background-color: #2563eb;
      color: white;
      border: none;
      padding: 14px 20px;
      border-radius: 999px;
      font-weight: 700;
      cursor: pointer;
    }

    button:hover {
      background-color: #1d4ed8;
    }

    .message {
      margin-top: 20px;
      padding: 16px;
      border-radius: 14px;
      background-color: #eff6ff;
      border: 2px solid #bfdbfe;
    }

    .error {
      background-color: #fef2f2;
      border-color: #fecaca;
      color: #991b1b;
    }

    .success {
      background-color: #ecfdf5;
      border-color: #bbf7d0;
      color: #166534;
    }
  </style>
</head>
<body>
  <h1>Form e Validazione</h1>

  <div class="card">
    <form id="signupForm">
      <label for="nameInput">Nome</label>
      <input id="nameInput" type="text" placeholder="Il tuo nome">

      <label for="emailInput">Email</label>
      <input id="emailInput" type="email" placeholder="tu@example.com">

      <label for="passwordInput">Password</label>
      <input id="passwordInput" type="password" placeholder="Almeno 6 caratteri">

      <button type="submit">Registrati</button>
    </form>

    <p id="message" class="message">Compila il form e invialo.</p>
  </div>

  <script src="script.js"></script>
</body>
</html>

Ora il form sembra appartenere a un sito.

Non a un documento del 1998.

Progresso.

Creare Funzioni Helper

La nostra validazione funziona.

Ma ripetiamo spesso questa riga:

messageElement.textContent = "...";

Creiamo una funzione helper.

Aggiorna script.js:

const signupForm = document.getElementById("signupForm");
const nameInput = document.getElementById("nameInput");
const emailInput = document.getElementById("emailInput");
const passwordInput = document.getElementById("passwordInput");
const messageElement = document.getElementById("message");

function showMessage(text, type) {
  messageElement.textContent = text;
  messageElement.className = `message ${type}`;
}

function handleSignup(event) {
  event.preventDefault();

  const name = nameInput.value.trim();
  const email = emailInput.value.trim();
  const password = passwordInput.value.trim();

  if (name === "" || email === "" || password === "") {
    showMessage("Compila tutti i campi.", "error");
    return;
  }

  if (!email.includes("@")) {
    showMessage("Inserisci un’email valida.", "error");
    return;
  }

  if (password.length < 6) {
    showMessage("La password deve avere almeno 6 caratteri.", "error");
    return;
  }

  showMessage(`Benvenuto, ${name}! I dati sembrano validi.`, "success");
}

signupForm.addEventListener("submit", handleSignup);

Molto più pulito.

Ora questo:

showMessage("Compila tutti i campi.", "error");

aggiorna sia il testo sia lo stile.

Le funzioni helper aiutano a evitare ripetizione.

E la ripetizione nel codice è come i calzini che spariscono in lavatrice.

All’inizio fa ridere.

Poi diventa un problema di stile di vita.

Svuotare gli Input Dopo il Successo

Se il form è valido, possiamo svuotare gli input.

Aggiungi questo dopo il messaggio di successo:

nameInput.value = "";
emailInput.value = "";
passwordInput.value = "";

Parte finale completa:

showMessage(`Benvenuto, ${name}! I dati sembrano validi.`, "success");

nameInput.value = "";
emailInput.value = "";
passwordInput.value = "";

Ora dopo un invio corretto, il form torna vuoto.

Questo è uno schema comune.

Invia.

Mostra messaggio.

Svuota campi.

Comportamento civile.

Molto raro nei form costruiti male.

Codice JavaScript Completo

Ecco il script.js completo:

const signupForm = document.getElementById("signupForm");
const nameInput = document.getElementById("nameInput");
const emailInput = document.getElementById("emailInput");
const passwordInput = document.getElementById("passwordInput");
const messageElement = document.getElementById("message");

function showMessage(text, type) {
  messageElement.textContent = text;
  messageElement.className = `message ${type}`;
}

function handleSignup(event) {
  event.preventDefault();

  const name = nameInput.value.trim();
  const email = emailInput.value.trim();
  const password = passwordInput.value.trim();

  if (name === "" || email === "" || password === "") {
    showMessage("Compila tutti i campi.", "error");
    return;
  }

  if (!email.includes("@")) {
    showMessage("Inserisci un’email valida.", "error");
    return;
  }

  if (password.length < 6) {
    showMessage("La password deve avere almeno 6 caratteri.", "error");
    return;
  }

  showMessage(`Benvenuto, ${name}! I dati sembrano validi.`, "success");

  nameInput.value = "";
  emailInput.value = "";
  passwordInput.value = "";
}

signupForm.addEventListener("submit", handleSignup);

Questo ora è un vero form interattivo.

Legge input.

Controlla dati.

Mostra messaggi.

Svuota campi.

Niente backend ancora.

Niente database ancora.

Niente draghi server ancora.

Ma questo è comportamento frontend reale.

Errori Comuni

Dimenticare preventDefault

Sbagliato:

function handleSignup(event) {
  const name = nameInput.value;
}

Corretto:

function handleSignup(event) {
  event.preventDefault();

  const name = nameInput.value;
}

Senza preventDefault, la pagina può ricaricarsi.

Poi il messaggio JavaScript sparisce.

Poi accusi il computer.

Poi ti ricordi la riga mancante.

Dimenticare .value

Sbagliato:

const email = emailInput;

Corretto:

const email = emailInput.value;

L’elemento input è la scatola.

Il valore è ciò che l’utente ha scritto.

Non validare la scatola.

Valida il contenuto.

Regola della pizza di nuovo.

Dimenticare return

Sbagliato:

if (password.length < 6) {
  showMessage("Password troppo corta.", "error");
}

showMessage("Successo!", "success");

Questo mostra errore e poi successo.

Confusione.

Corretto:

if (password.length < 6) {
  showMessage("Password troppo corta.", "error");
  return;
}

showMessage("Successo!", "success");

return ferma la funzione.

Molto utile.

Molto sottovalutato.

Come dormire.

Controllare l'Email in Modo Troppo Semplice

Questo è semplice:

email.includes("@")

Va bene per imparare.

Ma la validazione reale delle email è più complessa.

Per ora l’obiettivo è capire la logica della validazione.

Non diventare ministro internazionale dei formati email.

Pratica

Crea un form di contatto con:

Regole:

Mostra errori quando qualcosa non va.

Mostra un messaggio di successo quando tutto è corretto.

Esempio:

Grazie! Il tuo messaggio è pronto per essere inviato.

Ricorda:

Questo non invia davvero il messaggio.

Valida solo il form.

Comunque utile.

Comunque importante.

Comunque frontend.

Mini Challenge

Crea un form di conferma password.

Il form deve avere:

Regole:

Se tutto è corretto, mostra:

Password confermata.

Altrimenti mostra un errore utile.

Questo è molto comune nei siti reali.

Gli utenti spesso scrivono la password due volte.

Perché evidentemente un campo password non era abbastanza pressione emotiva.

Riepilogo

Oggi hai imparato:

Questo è un grande passo.

I form sono ovunque.

La validazione è ovunque.

Gli utenti scrivono cose strane ovunque.

JavaScript ci aiuta a portare ordine.

Non ordine perfetto.

Ma abbastanza ordine per sopravvivere.

Prossima Lezione

Nella prossima lezione impareremo local storage.

Local storage permette a JavaScript di salvare dati nel browser.

Questo significa che la pagina può ricordare cose anche dopo il refresh.

Attività.

Impostazioni.

Nomi.

Piccoli pezzi di dati.

Finalmente JavaScript ottiene una piccola memoria.

Pericoloso.

Ma utile.