Usare validator.js nel browser: guida pratica
validator.js è una libreria leggera e collaudata per validare stringhe (email, URL, UUID, numeri di carta, ecc.). Anche se nasce in ambiente Node.js, si può usare comodamente in browser via import ESM oppure tramite bundler.
Opzione 1 — Import ESM da CDN (senza build)
Importa il modulo in uno script ES Module e usa le API. Qui sotto un esempio che valida email e URL e aggiorna elementi esistenti sulla pagina.
// Import ESM (es. in <script type="module">)
import validator from "https://esm.sh/validator@latest";
// Helper per selezionare elementi già presenti nel DOM
const $ = (sel) => document.querySelector(sel);
// Supponiamo di avere input con id "email" e "url" e un output con id "out"
const email = $("#email");
const url = $("#url");
const out = $("#out");
const checkBtn = $("#check");
// Logica di validazione
checkBtn.addEventListener("click", () => {
const isEmail = validator.isEmail(email.value.trim());
const isURL = validator.isURL(url.value.trim(), { require_protocol: true });
const messages = [];
messages.push(isEmail ? "Email valida" : "Email non valida");
messages.push(isURL ? "URL valido" : "URL non valido (serve lo schema, es. https://)");
out.textContent = messages.join(" · ");
});
Note utili per l’import da CDN
- Usa
@latest
per ottenere l’ultima versione, oppure blocca una versione specifica (es.@13.12.0
). - Il pacchetto esporta di default l’oggetto
validator
con tutti i metodi (es.validator.isEmail
). - In ambienti CSP restrittivi, assicurati che il dominio del CDN sia consentito.
Opzione 2 — Bundler (Vite/Webpack) con installazione via npm
Se stai già usando un tool di build, importa la libreria nel tuo entry file e usa le API come segue.
// src/main.js
import validator from "validator";
export function validateForm(values) {
return {
email: validator.isEmail(values.email ?? ""),
url: validator.isURL(values.url ?? "", { require_protocol: true }),
uuid: validator.isUUID(values.uuid ?? "", 4),
};
}
// Esempio d’uso lato UI (assumendo elementi già presenti nel DOM)
const form = document.querySelector("#signup");
const msg = document.querySelector("#msg");
form?.addEventListener("submit", (e) => {
e.preventDefault();
const fd = new FormData(form);
const email = String(fd.get("email") || "").trim();
const password = String(fd.get("password") || "");
const okEmail = validator.isEmail(email);
const okPassword = validator.isLength(password, { min: 8 }) && validator.matches(password, /[0-9]/);
msg.textContent = okEmail && okPassword ? "Dati validi. Procedo con l’invio…"
: [
okEmail ? null : "Email non valida.",
okPassword ? null : "La password non rispetta i requisiti."
].filter(Boolean).join(" ");
});
Pattern comuni
import validator from "https://esm.sh/validator@latest";
validator.isEmail("nome@dominio.tld"); // true/false
URL
import validator from "https://esm.sh/validator@latest";
validator.isURL("https://esempio.com", {
require_protocol: true,
allow_underscores: false,
});
Stringhe e numeri
import validator from "https://esm.sh/validator@latest";
validator.isInt("42"); // true
validator.isFloat("3.14"); // true
validator.isBoolean("true"); // true
validator.isNumeric("123"); // false per default (cifre full-width)
// Consenti numeri latini soltanto:
validator.isNumeric("123", { no_symbols: true });
Identificatori
import validator from "https://esm.sh/validator@latest";
validator.isUUID("550e8400-e29b-41d4-a716-446655440000", 4); // true
validator.isMongoId("507f1f77bcf86cd799439011"); // true
Sanitizzazione
validator
include molte funzioni di normalizzazione e sanificazione.
import validator from "https://esm.sh/validator@latest";
validator.escape('"x"'); // <span>"x"</span>
validator.trim(" testo "); // "testo"
validator.blacklist("a_b-c", "_-"); // "abc"
validator.whitelist("a_b-c", "a-z"); // "abc"
Esempio: validazione di un form
Questo esempio impedisce l’invio finché i campi non risultano validi. Presuppone l’esistenza di un form con id signup
e di un elemento messaggio con id msg
.
import validator from "https://esm.sh/validator@latest";
const form = document.getElementById("signup");
const msg = document.getElementById("msg");
form?.addEventListener("submit", (e) => {
e.preventDefault();
const fd = new FormData(form);
const email = String(fd.get("email") || "").trim();
const password = String(fd.get("password") || "");
const okEmail = validator.isEmail(email);
const okPassword = validator.isLength(password, { min: 8 }) && validator.matches(password, /[0-9]/);
if (okEmail && okPassword) {
msg.textContent = "Dati validi. Procedo con l’invio…";
// invia con fetch() se necessario
} else {
msg.textContent = [
okEmail ? null : "Email non valida.",
okPassword ? null : "La password non rispetta i requisiti."
].filter(Boolean).join(" ");
}
});
Consigli pratici
- Convalida anche lato server: la validazione client-side migliora l’esperienza, ma non sostituisce i controlli server-side.
- Configura le opzioni: molte funzioni accettano parametri (es.
isURL
) per adattarsi ai tuoi casi d’uso. - Normalizza prima, valida poi:
trim
,normalizeEmail
e simili riducono i falsi negativi. - Blocca la versione in produzione per evitare cambiamenti improvvisi: es.
https://esm.sh/validator@13.12.0
.
Troubleshooting
- “Failed to load module”: verifica che il browser supporti i moduli ES e che il CDN sia raggiungibile.
- “validator is not a function”: usa l’import default (
import validator from "validator"
) e non le named exports. - RegEx troppo permissivi: preferisci le API di
validator
ai regex personalizzati quando possibile.
Conclusione
Con un semplice import ESM o tramite il tuo bundler, validator.js offre un set completo e affidabile di controlli per i form e per la validazione dei dati direttamente nel browser.