Before you launch or pay for traffic

Form validation best practices: accept real input

Your validation passes every test you run, because you type the way you always do. A visitor in another time zone, with an apostrophe in their name and a space in their phone number, meets the rules you wrote and does not get through.

5 visitors try to .
First test free with an accountRun it from your coding agent

What makes form validation accept the input people really type?

Write each rule from what visitors type, not from your own records, and state the expected format in words beside the field. Strip spaces and separators from phone numbers before you check them, and accept letters, apostrophes and hyphens in names. Check a field when the visitor leaves it or presses send, and keep every typed value when an error appears. A simulated visitor shows the field, the message and the value that was rejected, which is most of what you need to change the rule.

What this looks like in a report

Who
Marek, booking a van for a move this weekend
How they arrived
Opened a moving company's quote page from a search result, on his phone
Where they stopped
Quote form, on the moving date field

“I picked today because the move is tonight. The form says the date has to be in the future, so I changed it to tomorrow and lost the slot I wanted. I will phone them instead.”

The fix. Compare the moving date with the visitor's own day, and allow the current day. Show the rule beside the field, such as 'Pick today or a later date', and keep the other fields filled after an error.

An illustration. Run a test to see your own.See a real sample report

A date rule built in one time zone rejects today for other visitors

A quote form that checks the moving date against the server's clock can reject the date a visitor picked. A visitor in another time zone picks today and sees 'Date must be in the future', because the server is already on tomorrow. The visitor cannot see the rule, so they change the date, then the postcode, then the name, and assume the form is broken. The same pattern hits names with an apostrophe, phone numbers typed with a space after the country code, and postcodes with a space in the middle. Each one is a rule written from the owner's own data, not from what people type.

  • Each rule states its format in words beside the field, before the visitor types.
  • Phone numbers lose spaces, dashes and brackets before the check, and accept a leading plus.
  • Date rules use the visitor's own day, so a move dated today is allowed.
  • Errors appear when the visitor leaves a field or presses send, not on every key press.
  • A failed submit keeps every typed value and moves focus to the first field with an error.

Write each rule from what visitors type, not your records

The wrong version is a postcode rule copied from the four areas you already serve, so a visitor from a fifth area is refused for a correct postcode. The right version accepts the formats of every area you might serve, and you check it against a list of real entries, typed the way people type them, with and without spaces, in capitals and in lower case. The same goes for choices. If a dropdown holds only the regions on your last invoice, a visitor who lives beyond them has no option that fits, and the form gives them no message to explain why. Add an 'Other area' choice that asks them to say where, so a valid answer always exists.

Normalize first, then check, and accept the characters names use

A phone rule that counts every character can read '+49 30 1234567' as too long, because the spaces and the plus are not digits in its test. Strip the separators first, then check the digit count for the country, and only then decide the number is wrong. Names are the other common casualty. A rule that requires a space rejects a single name, and a rule that allows only letters rejects an apostrophe in O'Neil or a hyphen in a double surname. Accept letters from every alphabet, apostrophes, hyphens and accents, and require only that the field is not empty.

When an error appears, and what it keeps

Checking on every key press flags a phone number as wrong before the visitor has finished typing it, and the red border then looks like a verdict. Check when the visitor leaves the field, and again when they press send. The wrong version resets the form after a failed send, so the visitor retypes the address, the date and the message to fix one postcode. The right version keeps every value, moves focus to the first field with an error, and puts the message beside that field. On a phone the message has to sit above the keyboard, not under a button the keyboard hides. If a simulated visitor reaches a failed send, its screenshot shows whether the values stayed.

What you get with Mimiq

  1. 01

    Run it by hand, or on every pull request

    Paste a link and a task in the app and watch the visitors work. Or run them on every preview deploy: the GitHub Action comments on the pull request, any other CI can call the MCP endpoint, and your coding agent can run it too.

  2. 02

    Bugs and usability problems in one report

    The browser records errors and failed or slow requests on the step they happened. The visitors say where the wording or the steps confused them, and where they left.

  3. 03

    Visitors that behave like your audience

    Each visitor is a different profile with a reason to be there, matched to who the page is for, described by you, or built from your own customers.

  4. 04

    A prompt to fix each problem

    Every problem comes with a fix to paste into Cursor, Claude Code, Lovable or any coding agent, and one prompt hands over the top problems at once. Then send the same visitors through again.

  5. 05

    Follow every visitor

    See each visitor's whole path, step by step with screenshots, and what it was thinking at every step. Ask any visitor a question.

The browser records relevant JavaScript errors and failed or slow app requests encountered during the run, attached to the step where they occurred. The visitors are simulated: they find problems, they do not predict how many real people will convert.

A new service area can bring back the rejected postcode

A moving company adds a region, a second phone country or a holiday date rule, and the form starts rejecting input it accepted last month. Run the same visitors through the quote form after each rule change, with entries typed the way a stranger types them, including a name with an apostrophe and a phone number with spaces. Test on a phone too, where autofill can put a value in a format the form does not expect.

Starter

Try it on one launch

$9 once
120 credits, never expire

About 4 tests of 5 visitors

  • Visitors on your landing page, signup and checkout
  • Where they left and why, with a fix to copy for each problem
  • Run it in the app or on every pull request
  • Ask any visitor a question, included
  • Test accounts and protected previews
Buy 120 credits

Builder

Test every build

$19 a month
500 credits every month

About 20 tests of 5 visitors

  • Everything in Starter
  • Credits refill each month, and what is left rolls over once
  • Cancel anytime
Choose Builder

Pro

Test every release, as a team

$49 a month
1,500 credits every month

About 60 tests of 5 visitors

  • Everything in Starter
  • Credits refill each month, and what is left rolls over once
  • Cancel anytime
Choose Pro

Scale

Test at scale, every day

$149 a month
6,000 credits every month

About 240 tests of 5 visitors

  • Everything in Starter
  • Credits refill each month, and what is left rolls over once
  • Priority support
  • Cancel anytime
Choose Scale
$0for your first test, with a free account (Google sign-in, no card). It includes 50 credits, enough for 10 visitors. After that a visitor uses 5 credits, and packs start at $9 for 120 credits.
See a sample report

Questions

Should validation run while the visitor types?

Mostly no. Checking on each key press marks a phone number as wrong before the visitor has finished typing it. Check when the visitor leaves the field, and check everything again when they press send. Live checks suit a password strength meter or a character count, where the feedback helps while the visitor types.

Do I still need checks on the server if the page checks first?

Yes. A browser check can be skipped, and autofill or paste can fill a field in a way the page did not expect. The server should apply the same rules and return the same message, so the visitor sees one answer whichever check catches the problem.

Can a simulated visitor show me which rule is wrong?

It can show the field, the message and the value the visitor typed, which is most of what you need to find the rule. It does not tell you whether the rule is right for your customers, and it does not show how many real people give up at that field. For that, look at failed submits in your own logs.

Should I accept any phone number format?

Accept the formats people type for the countries you serve, strip the separators and check the digit count for each country. Reject only what cannot be a phone number, such as letters or an empty field. If the number is still wrong after stripping, say in words what the field wants, such as the country code and the digits.

Keep reading

Send visitors and see what breaks first.

Your first test is free: sign in with Google and it starts right away. Last checked 2026-11-02.

5 visitors try to .