Replace в jquery

Здравствуйте.
Подскажите пожалуйста как добавить мне в replace возможность поставить - (минус) и что бы возможность была поставить его только в начале всех цифр и один раз???

У меня вот такая регулярка сейчас стоит

$(this).val().replace(/(?=(\d+\.\d{2})).+|(\.(?=\.))|([^\.\d])|(^\D)/gi, '$1')

При этой регулярке я могу писать любое количество цифр до точки и после только две цифры … точку могу поставить только одну и то после цифр … И отдельная просьба на моем примере вообще разложить по полкам что да как в этой регулярке. Не как не могу разобраться =(

Так а что заменяться должно? Что вводится?

-? в начале.

https://regex101.com

Я не очень понял это подсказка была или вопрос
Если подсказка то как правильно поставить?
Если вопрос то мне надо что бы можно было написать отрицательное число и минус перед эти числом и только один раз

0 или 1 символ - это -?

Тут непонятно что должно находить, в конце вообще не цифры. :arrow_down:

в общем мне надо что бы можно было вводить только числа отрицательные и положительные и что бы можно было ставить только одну точку и после точки писать только две цифры … то что я скинул у меня принципе разрешает вводить только числа ставить одну точку и после точки писать два числа … с Js я пока на Вы =(

/-?\d+(\.\d{1,2})?/

https://regex101.com/r/kGuDV3/1

Так это regexp, а не JS.

я не знаю но это не работает у меня

Так а что в коде и что введено?
Получиться-то что должно, для чего replace вообще?

Сам input писать не буду вот jquery

$('input.count').on('input', function() {
  $(this).val($(this).val().replace(/(?=(\d+\.\d{2})).+|(\.(?=\.))|([^\.\d])|(^\D)/gi, '$1'));
});

Этот код нашел на каком то форуме и он работает

Так а делать он что должен с точки зрения пользователя? Что введено и что должно получиться?

Тут вторая часть регекспа странная и вряд ли имеет отношение к этой задаче.

В общем я должен вводить такие значения:

1.  123
2.  -123
3.  123.45
4.  -123.45

цифры соответственно могут быть разные главное что бы после точки можно было ввести только две цифры и минус можно поставить только перед всеми числами и точку и минус можно было поставить только один раз

я так понимаю вторая часть это эта

.+|(\.(?=\.))|([^\.\d])|(^\D)

Если да то тут на сколько я понимаю отвечает за точку и не только … без этого куска я могу вводить любой символ

А input type="number" не подходит?

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/number#allowing_decimal_values

К сожалению нет

Вот мой код который у меня https://jsfiddle.net/x18s5Lkr/

А почему?) Он ж именно это и делает.

С заменой сразу при вводе возможны всякие неудобства. Например, ввел 88.99, стер 88, чтобы написать 77, а курсор внезапно прыгнул в конец и пропала точка.

При я могу так же вписать почему то любой символ по мимо цифр, и буквы в том числе.
В type=“number” только стрелки появляются с права которые мне не нужны

Вписать можно, но форма не отправится и при переключении фокуса будет красным.

Оно не проверяет сразу после ввода, чтоб не было таких проблем

Ввод букв скорее всего лучше запретить через keypress и т.п. типа как тут.

Ну или если регекспом сразу всё проверять при вводе, то это решение проще и вроде лучше работает, меньше прыгает.

function setInputFilter(textbox, inputFilter) {
  ["input"].forEach(function(event) {
    textbox.addEventListener(event, function() {
      if (inputFilter(this.value)) {
        this.oldValue = this.value;
        this.oldSelectionStart = this.selectionStart;
        this.oldSelectionEnd = this.selectionEnd;
      } else if (this.hasOwnProperty("oldValue")) {
        this.value = this.oldValue;
        this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
      } else {
        this.value = "";
      }
    });
  });
}

setInputFilter(document.querySelector('input.count'), value => /^-?\d*\.?\d{0,2}$/.test(value));

https://jsfiddle.net/AlexP11223/uL2s93xh/10/

1 лайк

Большое спасибо за помощь =)