Как запретить ввод любого числа с максимум 2 цифрами до и 8 цифрами после десятичной дроби в jquery - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь проверить количество цифр до и после десятичного числа и общее количество цифр в функции on («размытие при нажатии клавиши», функция (событие)) в jquery.Это не работает для меня.

В моем html-коде есть элемент ввода, в который пользователь должен ввести:

  • Только число

  • Мин 0 и макс. 2 цифры до десятичного знака

  • Мин. 0 и макс. 8 цифр после десятичного числа

  • Только один десятичный знак

Я пытался сделать ниже регулярное выражение для этого /^\dndom0,2‹(.\dabilities0,8 угадавшего )?$/

Itмне кажется вполне нормально, но когда я попробовал это с jquery в моем коде, это не удается и позволяет пользователю вводить более 2 цифр перед десятичной дробьюцифры, если десятичной дроби там нет, при наборе самой.Если пользователь вводит десятичную дробь, он должен допускать еще 8 цифр

допустимых строк (мин. 0 и макс. До десятичной дроби и мин. 0 и макс. 8 после десятичной и десятичной дроби необязательны):

  • 12.12345678

  • 1.12345678

  • .12345678

  • 12.12345

  • 1.1234

  • .123456

  • 12

  • 1

Недопустимые строки:

  • 123.12345678

  • 123.123456789

  • 12.12.12

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Вместо проверки чисел 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>
0 голосов
/ 03 февраля 2019

Вы можете использовать следующее.

^[0-9]{0,2}([.][0-9]{0,8})?$

Пример,

Попробуйте здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...