The sole, single, only reason for any client-side validation (whether from javascript, HTML form attributes, or XForm constraints) is to make it more likely for a well-meaning user to do the right thing rather than input something that makes no sense.
On the server-side, you have to do it again for the same reasons, but also for security. You don't know that the client-side validation worked, and indeed you don't even know that the request came from a browser (it takes less than a minute to grab a form submission and then re-submit it with different values, and not much longer if you've tried to stop this by being clever about what the client sees, used nonces, etc.)
The effects of accepting invalid input may be minor, but considering that since you do have client-side validation, then if invalid input is received its more likely that you are being probed by someone with ill-intent (of course, there could just be a bug in the client-side stuff), so even if you can't predict any ill-effects in accepting such input, it's still worth blocking it.
That's before we consider whether SQL-injection, XSS, or other attacks are possible.