Regex Tester & Debugger→Specialized Version
πŸ”

Email Regex Tester

Email Regex Tester

//gm
Flags:
Examples:
ada@example.com first.last+tag@sub.domain.co.uk not-an-email@ @missing-local.com
#MatchIndexGroups
1ada@example.com0β€”
2first.last+tag@sub.domain.co.uk16β€”

Email Regex Tester

Test and validate email patterns with this specialized regex tester. Includes tested patterns and real-time matching.

Recommended Email Pattern

``regex ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ `

Test Examples

Valid matches:

  • user@example.com
  • john.doe@company.org
  • test+label@gmail.com
Invalid (should not match):
  • user@
  • @example.com
  • user@.com
  • user@com

Pattern Explanation

Matches standard email format: local part, @ symbol, domain, and TLD (2+ chars)

Alternative Patterns

1. ^[\w.-]+@[\w.-]+\.\w{2,}$ 2. ^.+@.+\..+$

How to Use

1. The pattern above is preloadedβ€”or enter your own 2. Add test strings to validate 3. See real-time match highlights 4. Copy the pattern for your code

Regex Quick Reference

SymbolMeaningExample
\dAny digit\d{3} matches "123"
\wWord character\w+ matches "hello"
+One or morea+ matches "aaa"
*Zero or morea* matches "" or "aaa"
?Optionalcolou?r matches "color"
^Start of string^Hello
$End of stringworld$
[abc]Character class[aeiou] matches vowels
(ab)Alternation(catdog) matches either

The Pattern

`regex ^[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ `

Flags: gm β€” m makes ^ and $ match at each line break, so the pattern can be tested against a list.

Broken Down

PartWhat it does
^[\w.%+-]+local part β€” letters, digits, underscore, dot, percent, plus, hyphen
@the literal separator
[A-Za-z0-9.-]+domain labels and their separators
\.[A-Za-z]{2,}$a TLD of at least two letters, anchored to the end

Tested Against Real Input

InputResult
ada@example.comβœ… matches
first.last+tag@sub.domain.co.ukβœ… matches
not-an-email@❌ no match
@missing-local.com❌ no match

The Important Caveat

No regex fully validates an email address β€” RFC 5322 permits quoted strings, comments and nested parentheses that no readable pattern captures. Use a permissive pattern to catch typos, then send a confirmation email. That is the only real validation.

Using It

`javascript const pattern = /^[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/gm;

// Test a single value β€” reset lastIndex first if the pattern is global pattern.lastIndex = 0; const isValid = pattern.test(value);

// Or find every match in a block of text const matches = [...text.matchAll(pattern)]; `

A global regex carries lastIndex between calls, so reusing one across test() calls returns alternating results. Either drop the g flag for validation or reset it each time.

Anchors, Greediness and Backtracking

Three behaviours account for most regex surprises, and this pattern shows all three.

Anchors. ^ and $ pin the match to the start and end of the input. Without them, \d{3} matches the 123 inside abc123def. With m in the flags β€” as here β€” they pin to each *line* instead, which is what lets one pattern be tested against a list.

Greediness. .* takes as much as it can and gives back only when forced; .*? takes as little as possible. On , the pattern <.*> matches the whole string and <.*?> matches just .

Backtracking. When a match fails, the engine reverses and tries other splits. Nested quantifiers like (a+)+ make that exponential, and a 30-character input can hang a server β€” a class of denial of service known as ReDoS. Avoid nesting quantifiers, and prefer explicit character classes over . wherever you can.

Testing It Properly

`javascript const pattern = /^[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/gm;

// A global regex keeps lastIndex between calls, so reusing one across // test() calls returns alternating true/false on the same input. pattern.lastIndex = 0;

// Named groups make the result readable const named = /(?\d{4})-(?\d{2})/; const { groups } = '2026-08'.match(named); `

Write the failing cases first. A pattern that accepts everything valid is easy; one that also rejects everything invalid is the hard half, and it is where the bugs are.

When Not to Use a Regex

Structured formats have parsers, and the parser is always more correct: new URL() for URLs, DOMParser for HTML, JSON.parse` for JSON, a date library for dates. Reach for a regex to *find* things in unstructured text, not to validate something a parser understands.

Frequently Asked Questions

Does this validate all valid emails?

This pattern catches most valid emails but the official email spec (RFC 5322) allows unusual characters. For production, consider also checking the domain exists.

What regex flavor does this use?

This tester uses JavaScript regex (ECMAScript). Most patterns work the same in Python, Java, and other languages.

Related Tools

Explore other tools you might find useful:

More Regex Tester & Debugger tools

You might also need