@lacspace/email-validate
v1.0.4
Published
Smart email validation — syntax, disposable/temp-mail detection, role & free-provider flags, Gmail normalization and 'did you mean?' typo suggestions. Zero-dependency, isomorphic.
Maintainers
Readme
@lacspace/email-validate
Email validation that goes beyond a regex — disposable detection, typo suggestions, normalization.
A regex tells you an address is shaped right. This tells you it's a mailinator throwaway, that
gmial.comshould begmail.com, thatinfo@is a role mailbox, and gives you a normalized canonical form for de-duping users.
- ✅ Robust syntax + length checks (RFC-5321-ish)
- 🗑️ Disposable / temp-mail detection
- 💡 "Did you mean?" typo suggestions (
gmial.com→gmail.com) - 👥 Role-address (
info@,admin@) & free-provider flags - 🔤
normalizeEmail— Gmail dots/+tagsstripped, lowercased (great for de-dupe) - ⚡ Zero dependencies · 🌍 isomorphic · 📦 ESM + CJS · fully typed
Install
npm install @lacspace/email-validate # or pnpm add / yarn add / bun addOne call, everything you need
import { validateEmail } from "@lacspace/email-validate";
validateEmail("[email protected]");
// {
// valid: true,
// normalized: "[email protected]",
// local: "john.doe+news",
// domain: "gmial.com",
// disposable: false,
// role: false,
// free: false,
// suggestion: "[email protected]" // ← typo caught
// }
validateEmail("[email protected]").disposable; // true
validateEmail("[email protected]").role; // true
validateEmail("nope@@bad").valid; // falseIndividual helpers
import {
isValidEmail, normalizeEmail, isDisposable, isRoleAddress, isFreeProvider, suggestEmail,
} from "@lacspace/email-validate";
isValidEmail("[email protected]"); // true
normalizeEmail("[email protected]"); // "[email protected]"
isDisposable("guerrillamail.com"); // true
isRoleAddress("support"); // true
isFreeProvider("yahoo.com"); // true
suggestEmail("[email protected]"); // "[email protected]"Real-world: clean a signup form
const r = validateEmail(input);
if (!r.valid) return fail("Please enter a valid email.");
if (r.suggestion) return confirm(`Did you mean ${r.suggestion}?`);
if (r.disposable) return fail("Please use a permanent email address.");
await createUser({ email: r.normalized }); // store the canonical formCustomize
validateEmail(input, {
extraDisposable: ["mycompany-temp.com"], // add your own throwaway domains
suggestions: false, // turn off typo suggestions
});You can also read/extend the exported sets: DISPOSABLE_DOMAINS, FREE_PROVIDERS, ROLE_LOCALS.
The Lacspace MailKit
| Package | For |
| --- | --- |
| @lacspace/mailer | Send email over SMTP |
| @lacspace/email-templates | Build responsive HTML emails |
| @lacspace/email-validate | Validate & normalize addresses (this package) |
| @lacspace/email-verify | MX + SMTP deliverability checks |
Licensing
This package is free under the Lacspace Free Licence — MIT-equivalent freedoms. Use it in personal and commercial projects at no cost; just keep the notice.
Not every Lacspace package is free. We also offer Commercial (paid), Client-specific, and Private (proprietary) packages under separate terms. See the full Lacspace Licence Centre.
Part of the Lacspace ecosystem — 35 zero-dependency, isomorphic TypeScript packages.
