This is annoying. Your user fills out the form, submits, and gets back "3 mistakes". He corrects those 3 mistakes, submits, and gets back "2 new mistakes" in fields he hasn't changed meanwhile. His reaction:
"Why did you not tell me about those 2 mistakes in the first place"?
And he's right.
Clientside validation was meant to help the user by providing faster feedback. Waiting for the user to click "submit" makes you lose most of that edge: you only save the round-trip time to the server, which these days often is minimal. Especially when it comes with the cost of two submits, your clientside validation is not helping the user, but annoying him.
1/ Have the clientside solution be immediate: as soon as a user enters a wrong email address (field goes out of focus), give a clue (show a box, color the field red) that the email address has the wrong format and will not be accepted by the server anyway.
2/ If the clientside solution cannot be immediate, disable it altogether. Have one serverside validation that catches ALL the errors, and shows them ALL at one (not stop at the first error, have the user fix that, repeat for every error).
In a perfect world, clientside verification catches every possible mistake a user can make, but we often know this is not possible. Users got used to this too: noone will get mad if the clientside validation only catches a subset of the mistakes the serverside validation catches.
This is why I often only code the 80% most common errors in the clientside, and leave the edge cases for the serverside. If a most common error can only be checked at serverside (eg "username already taken"), a small AJAX request can do wonders: while the user continues filling out the form, he'll notice his username was already taken and can change it to something else.