Когда дело доходит до защиты от дурака, всегда следует стараться сохранять ориентир для «интеллекта пользователя».
Несмотря на то, что пренебрежение всем, кроме чисел, точка и дефис кажутся идеальным выбором, вам также следует подумать о том, чтобы позволить им ввести любой контент, а когда они закончат, очистить ввод; если не верный номер, показать ошибку . Этот метод гарантирует, что независимо от того, что пользователю удастся сделать, результат всегда будет действительным. Если пользователь достаточно наивен, чтобы не понимать предупреждения и сообщения об ошибках, нажатие кнопки и видение того, что ничего не происходит (как при сравнении кодов клавиш), только еще больше запутает его / ее.
Кроме того, для форм проверки и отображение сообщений об ошибках почти необходимы. Таким образом, положения могут быть уже там. Вот алгоритм:
При потере фокуса или отправке формы выполните следующие действия.
1,1. Считать содержимое с ввода и применить parseFloat к результату
1.2. Если результатом является номер недоступный (NaN), сбросьте поле ввода и откройте сообщение об ошибке : «Пожалуйста, введите правильный номер:
например. 235 или -654 или 321,526 или -6352,646584 ".
1,3. Иначе, если String (результат)! == (содержимое из ввода), измените значение поля на результат и отобразите предупреждение : «Значение, которое вы
введены были изменены. Ввод должен быть действительным числом: например. 235 или
-654 или 321.526 или -6352.646584 ". Для поля, которое не может допустить неподтвержденного значения, это условие может быть добавлено к шагу 1.2.
* * 1.4 тысячу двадцать три. Иначе ничего не делать.
Этот метод также дает дополнительное преимущество выполнения проверок на основе минимального значения, максимального значения, десятичных разрядов и т. Д. , если необходимо. Просто нужно выполнить эти операции над результатом после шага 1.2.
Недостатки:
Ввод позволяет пользователю вводить любое значение, пока фокус не будет потерян или форма не будет отправлена. Но если инструкции по заполнению поля были достаточно четкими, в 90% случаев это может не сработать.
Если для отображения предупреждения используется шаг 1.3, он может быть пропущен пользователем и может привести к непреднамеренной отправке ввода. Если вы сгенерируете ошибку или отобразите предупреждение правильно, это решит проблему.
Speed. Это может быть медленнее в микросекундах, чем метод регулярных выражений.
Преимущества:
Предполагая, что пользователь имеет базовые знания для чтения и понимания,
Широкие возможности настройки.
Работает кросс-браузерно и независимо от языка.
Использует уже имеющиеся функции в форме для отображения ошибок и предупреждений.