Every signup form has one somewhere: a little check that rejects “not-an-email” and accepts “person@domain.com.” That’s regex validation, and it’s doing exactly what it was built to do. The problem is what people assume it’s doing, which is more than that.
Regex checks formatting. It has no way to know whether “person@domain.com” is a real mailbox that will ever be opened, or a string that happens to look like one. That gap is where a meaningful chunk of your “verified” signups turn out to be dead weight — and it’s a gap that stays invisible until you actually go looking for it, which most teams never do.
What regex actually checks
A typical email regex pattern confirms:
There’s exactly one @ symbol
There’s text before it (the local part)
There’s a domain after it with at least one dot
No obviously illegal characters (spaces, certain punctuation)
That’s it. It’s a pattern match against a string, running entirely on your own server, with zero communication to the outside world. It never contacts the domain in question. It never asks whether a mailbox exists there. It’s the software equivalent of checking that a phone number has the right number of digits without ever dialing it to see if anyone picks up.
It’s also worth knowing that email address syntax, per the actual technical specification (RFC 5322), is more permissive than most regex patterns account for — quoted strings, certain special characters, and unusual-but-technically-valid local parts exist in the spec even though almost nobody uses them in practice. Most production regex patterns simplify this considerably, which occasionally means a genuinely valid but unusual address gets rejected by an overly strict pattern, the opposite problem from the one this piece is mainly about, but worth knowing exists.
What regex can’t catch
Here’s the part that matters: “fake@fakebutformatted.com” passes every regex check a signup form runs, as long as it’s shaped correctly. So does “test@gmail.com” typed by someone who doesn’t want to give a real address. So does an address at a domain that used to exist and doesn’t anymore, as long as the string itself is well-formed.

Regex has no visibility into any of that. It’s checking the shape of the sentence, not whether the person it describes exists. This isn’t a flaw in regex as a tool — it’s simply outside what regex, as a category of technique, is capable of doing. A regular expression operates entirely on the text in front of it; it has no mechanism to reach out to a domain’s mail server and ask a question, because that’s not what regular expressions are for.
What real verification adds
Real verification — the kind covered in what an email verifier actually checks — goes past formatting into layers regex can’t touch:

MX record check — does the domain even have a mail server capable of receiving anything?
SMTP mailbox check — does the specific mailbox exist and accept mail, confirmed by actually asking the receiving server (without sending a real message — see how to verify without sending an email)
Catch-all and disposable detection — is this a domain that accepts everything regardless of validity, or a known temporary-email provider?
Each of these requires actually reaching out to the domain in question. Regex, running purely on pattern-matching, structurally can’t do any of it. This is the crucial distinction worth internalizing: regex and real verification aren’t two competing approaches to the same problem, one better and one worse. They’re solving genuinely different problems — regex confirms shape, verification confirms existence — and a signup form needs both, not one instead of the other.
Why this gap costs you more than it looks like
A signup form that only regex-validates is optimizing for the wrong metric: it makes sure the field was filled in correctly, not that the account is reachable. That distinction shows up downstream in a few predictable ways:
Wasted onboarding emails that never get delivered, inflating your “new signups” number while deflating actual activation
Inflated list size that looks healthy in a dashboard but bounces the moment you actually send a campaign to it
Skewed analytics — a signup funnel that looks like it’s converting, when a chunk of those “conversions” were never reachable in the first place
Wasted downstream effort — sales or customer success teams following up on accounts that were never going to respond, because the underlying address was never real, spending time on leads that regex incorrectly certified as legitimate
A closer look at why the “shape looks right” trap is so easy to fall into
It’s worth spending a moment on why this specific mistake is so common, even among experienced product and engineering teams. Regex validation feels complete because it produces a clear, binary result — an address either matches the pattern or it doesn’t, with no ambiguity in the output. That crispness creates a false sense of thoroughness. A form that rejects “not-an-email” and accepts “person@domain.com” looks, from a UX and QA perspective, like it’s doing its job well: bad input gets an error message, good-looking input gets accepted.
The blind spot only becomes visible when you look at what happens after signup — specifically, whether onboarding emails, password reset links, or receipts actually get delivered to the addresses your form accepted. Most teams don’t routinely audit this connection, because regex validation happening at the front door and email delivery happening later, often through a separate transactional email service, aren’t naturally reviewed together. The gap hides in the seam between two systems that nobody’s specifically responsible for reconciling.
How to actually diagnose whether your form has this problem
Rather than assuming your signup flow does or doesn’t have this gap, here’s a concrete way to check: pull your transactional email service’s delivery logs for new-signup welcome or confirmation emails over the last month, and compare the bounce rate specifically for that email type against your overall email bounce rate. If new-signup confirmation emails bounce at a meaningfully higher rate than your established, long-standing user base’s emails do, that’s a strong signal your form’s validation is catching format issues but missing reachability issues — exactly the gap this piece describes.
A second diagnostic, if your analytics allow it: look at how many new accounts never open a single email in their first week, cross-referenced against whether that email even attempted delivery successfully. Accounts where the welcome email hard-bounced immediately are a different problem (an unreachable address) than accounts where the email delivered but nobody opened it (a genuine engagement problem) — and conflating the two, as many dashboards implicitly do, hides exactly the issue this piece is about.
Where regex genuinely earns its place, and where teams over-rely on it
It’s worth giving regex its due, since the point here isn’t that it’s a bad technique — it’s that it’s being asked to do a job it was never designed for. Regex is excellent at catching the specific class of errors that come from human typing mistakes and malformed input: a missing @ symbol, a stray space, a domain with no dot in it, an empty field submitted by accident. These are genuinely common failure modes, and catching them instantly, without any network round-trip, is a real and valuable service a signup form provides.
Where teams over-rely on it is in treating a passed regex check as equivalent to “this is a good email address” in any deeper sense — using it as the sole gate for account creation, trusting it as evidence of data quality in downstream reporting, or assuming that because a field is regex-validated, no further check is needed anywhere else in the pipeline. The technique itself hasn’t failed at that point. The failure is architectural: relying on one layer to answer a question it was never built to answer.
A mental model for thinking about validation layers generally
It helps to think of email address quality checking as a series of layers, each answering a progressively harder question, similar to (and in fact overlapping with) the four-layer breakdown covered in what an email verifier actually checks:
Is this a well-formed string? Regex answers this, instantly, for free, with no external dependency.
Does this domain exist and accept mail at all? This requires an MX record lookup — a step up in cost and complexity from regex, but still relatively fast and cheap.
Does this specific mailbox exist at that domain? This requires an actual SMTP-level conversation with the receiving mail server — the most expensive and slowest layer, but also the one that answers the question people actually care about when they say “is this email real.”
Is the domain configured in a way that makes the previous answer unreliable? Catch-all and disposable detection, layered on top of the SMTP check, to flag cases where the answer to the previous question can’t be trusted at face value.
A signup form that only implements the first layer is answering roughly 25% of the real question, while presenting itself (through a passed validation check with no error message) as though it had confirmed the whole thing. Recognizing which layer any given check operates at is the single most useful mental habit for catching this kind of gap before it costs you real signups.
What this looks like from an engineering implementation standpoint
For teams weighing whether to add real verification to an existing signup flow, it’s worth being concrete about what actually changes in the codebase, since “add verification” can sound more involved than it typically is in practice. In most implementations, the existing client-side or server-side regex check stays exactly where it is, unchanged — it’s still a fast, free first gate. A new server-side call gets added after the regex check passes, hitting a verification API (see our API integration guide for working code in a few languages) before the account record is actually created in the database.
The response from that call then determines what happens next: a confirmed-invalid result blocks account creation with a clear error message asking the user to double-check their address; a confirmed-valid result proceeds normally; and an ambiguous result (risky, catch-all) is usually best handled with a softer path, like proceeding with account creation but flagging the account for a follow-up confirmation email or a manual review queue, rather than an outright block. This is a small, well-contained addition to an existing signup flow, not a rebuild of it.
A quick example
A startup building a project management tool — call it Ledgerly (a different Ledgerly than any real company, just a stand-in) — notices their trial-to-paid conversion rate looks unusually low compared to their signup volume. Digging in, someone finally checks: of 1,000 trial signups last month, how many of the “welcome” emails actually delivered?
Turns out 140 of the addresses were syntactically perfect and passed the signup form’s regex check without issue — but had no working mailbox behind them at all. Those 140 never saw a single onboarding email, never got the trial-extension reminder, never had a real chance to convert. They weren’t failed trials. They were never reachable trials, hiding inside a “conversion problem” that was actually a verification gap.
What made this particularly costly for Ledgerly’s team, worth adding: their product team had spent the prior quarter iterating on onboarding email copy and timing specifically to improve trial-to-paid conversion, based on aggregate open and click data that included these 140 unreachable accounts diluting the denominator. Once the team excluded unreachable accounts from their conversion analysis and added verification at signup going forward, their actual engaged-user conversion rate looked meaningfully healthier than the raw number had suggested — the underlying onboarding experience wasn’t nearly as weak as the diluted metric implied. The real problem hadn’t been onboarding at all. It had been counting unreachable accounts as failed conversions rather than recognizing they were never real trials to begin with.
What a healthy signup validation stack ultimately looks like
Putting all of this together, a well-designed signup form ends up with a small stack of checks running in sequence, each cheaper and faster than the next, only escalating to the more expensive layers when the earlier ones pass. Regex first, instantly, for free. Then a real verification call, server-side, for the addresses that pass regex, checking MX and SMTP-level reachability. Then, for ambiguous results specifically, a softer secondary path — a confirmation email, a manual review flag — rather than an automatic accept or reject. This isn’t a radical rearchitecting of a signup flow. It’s a small, additive change layered on top of what most forms already have.
Should you replace regex, or add to it?
Add to it — don’t rip it out, and don’t treat this as an either/or decision. Regex is still useful as a fast, free, first-pass filter that catches obvious garbage before it hits a heavier check. It runs instantly and locally, with zero network cost, which makes it a sensible first gate before anything more expensive happens. The fix is adding a real verification layer behind it, either at signup (via the developer API, which checks MX, SMTP, and catch-all status server-side) or as a periodic cleanup pass on your existing user list through the bulk verifier, whichever fits your team’s priorities and available engineering time better.
Why this problem tends to get worse over time, not better
A specific dynamic worth flagging: signup form validation gaps like this one tend to compound silently rather than surface on their own. Each month a form runs with regex-only validation adds another batch of unreachable accounts to the user database, and because nothing about the signup flow is failing loudly — no errors, no support tickets, no obvious symptom — there’s rarely a natural trigger that prompts anyone to investigate. The problem is discovered, if it’s discovered at all, only when someone happens to look closely at a downstream metric (conversion rate, email engagement, support ticket volume relative to signup volume) and starts asking why the numbers look off.
This is worth naming because it argues for treating this as a proactive check worth doing periodically, rather than assuming it will announce itself. A quarterly review of new-signup email bounce rates, even a quick five-minute look at the numbers, catches this kind of quiet accumulation before it’s had a year to compound into a much larger, harder-to-untangle dataset problem.
Check what your signup form is actually letting through — paste a test address into the homepage checker, or wire the developer API directly into your signup flow to catch what regex alone misses. For an existing list of accounts you suspect includes some unreachable addresses, the bulk verifier can check the whole thing at once.
Questions
Frequently asked questions
Isn’t regex enough for most signup forms?
Regex is useful for catching obvious typos and malformed email addresses. However, it can’t confirm whether an address actually exists or is reachable. For anything you plan to email, reachability is a separate and more important check.
Can I add real verification without slowing down my signup flow?
Yes. API-based email verification typically returns results in under a second, making it fast enough to run during signup without noticeably affecting the user experience.
Does adding verification to a signup form reduce signup numbers?
It can reduce the number of accounts created with unreachable email addresses. That’s usually beneficial because those accounts were unlikely to activate anyway. A smaller number of real, reachable users is more valuable than a larger number that includes invalid accounts.
What’s the easiest way to add verification to an existing signup form?
Call the verification API server-side when the form is submitted, before creating the account. Then reject or flag addresses that are confirmed invalid. Full implementation examples are available in the API integration guide.
Will real verification catch every fake signup?
No. No verification method can catch every fake signup. A technically valid and working mailbox may still belong to someone who has no intention of using your product. Verification confirms email reachability, not user intent.
How do I know if my current signup form actually has this gap?
Compare the bounce rate of welcome emails sent to new signups with your overall email bounce rate. If new-signup emails have a meaningfully higher bounce rate, it’s a strong indication that your form may be checking email format without verifying actual reachability.
Should risky or catch-all results block a signup outright?
Generally, no. Risky and catch-all statuses indicate uncertainty rather than a confirmed problem. A softer approach, such as requiring an additional email confirmation step, is usually better than automatically rejecting the signup.
Is there a risk of rejecting real users if I add stricter validation?
Yes, if validation is implemented too aggressively. Overly strict regex rules can reject unusual but valid addresses, while blocking risky or catch-all results can turn away legitimate users. Hard rejection should generally be reserved for confirmed-invalid addresses, with softer handling for ambiguous results.
How often should I audit my signup form for this kind of gap?
For most products, a quarterly review is reasonable. Compare new-signup email bounce rates with your overall bounce rate to identify problems before they become significant.
Does this issue apply equally to B2B and B2C signup forms?
The underlying issue is the same, but the common sources of bad or ambiguous addresses can differ. B2C forms often see more casual typos and deliberately fake addresses, while B2B forms may see more catch-all domains and role-based addresses, which require more nuanced handling.

Passionate about technology, innovation, and creating impactful digital solutions.
LinkedIn

