Вместо проверки чисел event.which
вы можете использовать вместо этого одно регулярное выражение при вводе, чтобы исправить ввод, когда вводится что-то, что не соответствует требуемой структуре.Затем, когда это произойдет, вы можете заменить неправильный ввод последним известным действительным вводом.
Обратите внимание, что вы хотите разрешить 0-2 цифры, точку и 0-8 цифр, которые максимум 11 символов, поэтому ядумаю, что $(this).val().length>9
должно быть 11.
Поскольку предыдущий шаблон также допускает одну точку в конце, вы можете, например, при отправке формы проверить конечное значение, используя это регулярное выражение, которое проверяет, является ли значениелибо 1-2 цифры, за которыми следуют точка и 1-8 цифр, либо |
точка и 1-8 цифр, и не допускается пустая строка.
^(?:\d{1,2}(\.\d{1,8})?|\.\d{1,8})$
Regex demo
let lastValid = "";
$("#longitude").on("keypress keyup blur", function(event) {
if (/^\d{0,2}(?:\.\d{0,8})?$/.test($(this).val())) {
lastValid = $(this).val();
} else {
event.preventDefault();
$(this).val(lastValid);
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="" name="">
<input type="text" value="" id="longitude">
</form>