Free tool

Form validation test case generator

Pick your form's fields and get the test cases for each — with the exact value to paste and what should happen. Free, no signup.

1. Your form's fields

Click a field to change its type, name or limit.

2. Your test cases

63 across 4 fields

CaseWhat it checksExpectedValue
Standard addressValidThe happy path is accepted and the account is createdAccept
a.hansen@example.com
Plus-addressingValidA + tag is valid per RFC 5321 — rejecting it locks out Gmail power usersAccept
qa.tester+signup1@example.com
Subdomain + multi-part TLDValidDeep domains are accepted; naive regexes stop at one dotAccept
user@mail.example.co.uk
Mixed caseValidThe address is accepted and matched case-insensitively at loginAccept
QA.Tester@Example.COM
Apostrophe in the local partValidReal addresses contain apostrophes — accepted and stored unescapedAccept
o'brien@example.com
EmptyBoundaryRequired-field validation fires and the message names this fieldReject
(empty)
Exactly the limit (254)BoundaryA value at the documented maximum is accepted and stored wholeAccept
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa…254
One over the limit (255)BoundaryOver-length input is rejected, not silently truncatedA maxlength attribute hides this in the UI — check what actually reaches the database.Reject
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa…255
64-character local partBoundaryThe RFC maximum local part is acceptedAccept
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa…76
65-character local partBoundaryOne over the RFC local-part maximum is rejectedReject
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa…77
Leading and trailing spacesBoundaryThe value is trimmed before validation, or rejected with a clear messageSilently storing the untrimmed value is the bug — the user then can't log in.Decide & be consistent
user@example.com
No @ symbolMalformedA plain string is rejectedReject
notanemail.com
Two @ symbolsMalformedMultiple @ characters are rejectedReject
user@@example.com
No domainMalformedA missing domain is rejectedReject
user@
No local partMalformedA missing local part is rejectedReject
@example.com
No TLDMalformedA bare hostname is rejectedReject
user@example
Trailing dotMalformedA dangling dot in the domain is rejectedReject
user@example.
Space inside the addressMalformedEmbedded whitespace is rejected, not strippedReject
us er@example.com
Accented local partSpecial charactersThe address survives UTF-8 round-tripping if acceptedDecide & be consistent
josé@example.com
Internationalised domainSpecial charactersAn IDN domain is accepted or rejected consistently — never mangledIf accepted, confirm the confirmation email actually sends.Decide & be consistent
user@exämple.com
CaseWhat it checksExpectedValue
Meets the policyValidA compliant password is accepted and the account is usable afterwardsAccept
Correct-Horse-9
EmptyBoundaryRequired-field validation fires and the message names this fieldReject
(empty)
Exactly the limit (64)BoundaryA value at the documented maximum is accepted and stored wholeAccept
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa…64
One over the limit (65)BoundaryOver-length input is rejected, not silently truncatedA maxlength attribute hides this in the UI — check what actually reaches the database.Reject
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa…65
One characterBoundaryThe minimum-length rule fires and states the minimumReject
a
1,000 charactersBoundaryA very long password is capped — unbounded input makes hashing a denial-of-service vectorReject
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa…1000
Leading and trailing spacesSpecial charactersSpaces are preserved, not trimmed — trimming on signup but not on login locks the user outThe classic version of this bug: signup trims, login doesn't.Accept
spaced pass
Spaces onlySpecial charactersA whitespace-only password is rejectedReject
(8 spaces)
EmojiSpecial charactersMulti-byte characters survive hashing and log the user back inIf accepted, the real test is logging in again afterwards.Decide & be consistent
p@ssw😀rd9
Non-Latin scriptSpecial charactersUnicode is byte-safe end to endDecide & be consistent
Пароль-2026
Apostrophe and quotesSpecial charactersQuote characters are stored and compared correctlyAccept
O'Brien"9x
Well-known passwordMalformedA breached/common password is refused if you claim a strength policyReject
password123
Sequential digitsMalformedTrivial sequences are refused by the strength checkReject
12345678
Tab and newlineMalformedControl characters are rejected or normalised — never stored rawReject
pass word
CaseWhat it checksExpectedValue
Ordinary nameValidThe happy path stores and renders unchangedAccept
Anna Hansen
ApostropheValidThe name saves and renders as typed — no escaping artefacts like O'BrienAccept
Siobhán O'Brien
Hyphen and spaceValidCompound names are acceptedAccept
Anne-Marie de la Cruz
Single characterValidOne-letter names are valid — a min-length of 2 is a real bug for many usersAccept
O
EmptyBoundaryRequired-field validation fires and the message names this fieldReject
(empty)
Exactly the limit (255)BoundaryA value at the documented maximum is accepted and stored wholeAccept
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa…255
One over the limit (256)BoundaryOver-length input is rejected, not silently truncatedA maxlength attribute hides this in the UI — check what actually reaches the database.Reject
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa…256
Leading and trailing spacesBoundaryThe stored value is trimmedDecide & be consistent
Anna Hansen
AccentsSpecial charactersLatin-1 characters survive storage, search and exportAccept
Ñoño Ångström
CJK charactersSpecial charactersNon-Latin scripts render correctly in every view, not as boxesAccept
李伟
Right-to-left scriptSpecial charactersRTL text does not break the layout of the list or table it appears inAccept
مرحبا
EmojiSpecial characters4-byte characters are stored intact — a latin1 column truncates hereDecide & be consistent
Anna 😀
Double quotesSpecial charactersQuotes survive round-tripping through JSON, CSV export and the UIAccept
"Anna"
Angle bracketsSpecial charactersMarkup characters are escaped on output rather than renderedThe value should come back out as typed — literally, with the tags visible.Accept
Anna <b>Hansen</b>
Digits onlyMalformedA numeric-only name is rejected if your rules say so — decide, don't driftDecide & be consistent
12345
Tab and newlineMalformedControl characters are stripped or rejectedReject
Anna Hansen
CaseWhat it checksExpectedValue
E.164ValidThe canonical international format is acceptedAccept
+14155552671
National format with punctuationValidBrackets, spaces and dashes are normalised rather than rejectedAccept
(415) 555-2671
Digits onlyValidAn unformatted number is accepted and normalised for storageAccept
4155552671
Non-US country codeValidNumbers outside the default country are accepted (length differs by country)Accept
+442071838750
EmptyBoundaryRequired-field validation fires and the message names this fieldReject
(empty)
Exactly the limit (20)BoundaryA value at the documented maximum is accepted and stored wholeAccept
99999999999999999999
One over the limit (21)BoundaryOver-length input is rejected, not silently truncatedA maxlength attribute hides this in the UI — check what actually reaches the database.Reject
999999999999999999999
Three digitsBoundaryA too-short number is rejectedReject
123
LettersMalformedAlphabetic input is rejected with a format messageReject
555-CALL-NOW
Unassigned area codeMalformedA structurally plausible but impossible number is rejectedReject
+1-000-000-0000
Impossible country prefixMalformedAn out-of-range country code is rejectedReject
+999999999999999
Non-Latin digitsSpecial charactersArabic-Indic digits are normalised or rejected — never stored as-isCommon on Arabic-locale keyboards; silently storing them breaks SMS.Decide & be consistent
٤١٥٥٥٥٢٦٧١
EmojiSpecial charactersNon-numeric characters are rejectedReject
📞4155552671
How to use it

Three steps, then keep the set

  1. Step 1

    Match your form

    Set each field's real limit. A 40-character name field gets 40- and 41-character cases, not generic ones.

  2. Step 2

    Work down the table

    Copy the value, paste it, compare against the expected column. Invisible values — empty, spaces, a 256-character run — are labelled but copy exactly.

  3. Step 3

    Keep the set

    Export CSV or JSON, or copy the Markdown table into a Jira ticket or a pull request so the next person runs the same checks.

Why Fillr

Stop pasting them one at a time

These cases come from the test-data modes in Fillr — a Chrome extension that fills any web form with data you control. Save the form once, set a rule per field, and fill it with boundary values, malformed input, or your own spreadsheet rows, one click at a time.

FAQ

Questions, answered.