Наиболее удобный, как по мне способ, это ajax валидация. Логика валидации на сервере дает больше места для маневра, например уникальность поля проверить и т.д. Хотя лишние запросы летают. А на клиенте только вывод ошибок. Обычно все сводится к скрипту в 6 строк, где пришедший ответ выводится в виде nitify, юзаю
alertifyjs.com