Как правило, вы должны принимать ввод пользователя точно, если он введен. Скорее всего, пользователи сделали это таким образом по уважительной причине. Например, представьте, что пользователь вводит внешний адрес, а затем ваше приложение запирает его, пытаясь отформатировать как внутренний адрес. По крайней мере, пользователи вводили данные так, как они привыкли, так что изменение может затруднить их перекрестную проверку.
Однако есть несколько исключений:
Добавить значения по умолчанию для неполного ввода. Добавление ввода, который пользователь прекратил (например, годы в даты, единицы измерения), обеспечивает хорошую обратную связь о том, как приложение интерпретирует ввод, который в противном случае был бы неоднозначным. Это также побуждает пользователя использовать значения по умолчанию, делая их ввод более эффективным.
Устраните другие неясности. Измените на однозначный формат, если формат пользователя открыт для интерпретации. Например, если у вас есть международные пользователи, вы можете изменить «9-8-09» на «8 сентября 2009» (или «9 августа 2009 года»), чтобы оставить отзыв о том, что ваше приложение считает месяцем и днем.
Добавьте разделители, если они не указаны. Автоматическое добавление стандартных или даже произвольных разделителей к длинным буквенно-цифровым строкам (например, номерам телефонов, номерам кредитных карт, серийным номерам) обеспечивает отображение ввода, которое пользователи могут легче проверять. Иногда пользователи могут вводить строку без разделителей, чтобы работать быстрее или потому, что они становятся жертвами злоупотреблений в сети сайтами, которые отказываются принимать даже стандартные разделители.
Исправление орфографии, грамматики и заглавных букв. Пользователи часто ценят это, но только если есть способ переопределить это. Некоторым пользователям нравится использовать «i» как местоимение от первого лица.
Если поле используется более чем одним пользователем, вам, вероятно, следует автоматически отформатировать значение каким-то стандартным способом, который подходит большинству ваших пользователей, но это следует делать, когда значение хранится в бэкэнде, а не когда фокус покидает поле. Например, если пользователь вводит время 15:30, оно должно оставаться равным 15:30, пока пользователь просматривает страницу. Однако в следующий раз, когда пользователь (любой пользователь) получит данные, они должны появиться в 15:30 (если так большинство пользователей привыкли видеть время).
Такое внутреннее форматирование применяется для обрезки пробелов, чтобы все пользователи могли последовательно искать, находить и сортировать поля. Вероятно, не стоит заменять пустое значение (или любое недопустимое значение) значением по умолчанию, поскольку пользователи вряд ли ожидают получить это значение. Исключением может быть замена пустого значения на 0 для числовых полей в ситуациях, когда очевидно пусто == нет == ноль, но, опять же, это, вероятно, следует делать при хранении в серверной части, а не в самом поле. Если пробел является неоднозначным (например, может означать 0 или может означать «я не знаю»), тогда применяется вторая вышеупомянутая пуля, и вы можете захотеть выполнить автозамену в поле, когда фокус потерян.
Конечно, если ваши пользователи по-разному используют формат данных, у вас могут быть разные варианты приложения, которые по-разному отображают тип данных для разных групп пользователей, или вы можете сделать формат тип данных предпочтение пользователя, но это действительно другая проблема.