Вы выполняете проверку на каждом этапе, но по несколько иным причинам.
Вы проверяете, когда пользователь устанавливает значение, чтобы обеспечить немедленную обратную связь с пользователем о том, действителен ли ввод.Эта проверка должна использоваться только для улучшения взаимодействия с пользователем.Вы можете проверять, когда пользователь печатает, если это уместно, но убедитесь, что не запретите пользователю вводить недопустимый частичный ввод, поскольку может появиться еще больше, и вы не хотите, чтобы проверка мешала.
Вы проверяете, прежде чем пользователь отправит форму, чтобы убедиться, что отправка будет действительной без затрат времени полного обхода на сервер.Это в основном относится к вещам, которые не были или не могли быть проверены во время входа пользователя, и это могло бы включать некоторую связь с сервером, например, чтобы проверить, доступно ли имя пользователя, без перезагрузки страницы.Этот этап также в основном для пользы пользователя.Независимо от того, проверяете ли вы каждый элемент во время ввода или отправки, это зависит от вас и должно зависеть от того, что обеспечивает лучший пользовательский опыт и лучше соответствует его ментальной модели.
Наконец, вам нужно проверить все, когда дело доходит досервер, потому что вы не можете доверять браузеру.Эта проверка в основном для безопасности.Вы никогда не можете предполагать, что любые данные, поступающие от вашего клиента, являются чистыми, потому что они могут не поступать от вашего клиента.Это может исходить от враждебного агента, который подражает вашему клиенту.Так что проверяйте все полностью для всех возможных эксплойтов и других недопустимых условий, независимо от того, было ли это проверено в клиенте.
Надеюсь, это поможет.