Validate on input as well as blur.
Don't early return on valid.

(because then you can't go from valid -> invalid, which is
possible if you delete the input)