Регулярное выражение jQuery — JavaScript допускает только числовое значение и знак минус в качестве первого символа

#javascript #jquery #regex

#javascript #jquery #регулярное выражение

Вопрос:

Я хочу, чтобы пользователи вводили числовые значения только в моем вводе, поэтому я помещаю приведенный ниже код.

<input type="text" class="form-control rounded-pill bg-light" autocomplete="off" name="free_credit_amount" id="free_credit_amount" placeholder="Free credit amount">

 $('body').on('keyup', '#free_credit_amount', function(){
    this.value = this.value.replace(/[^0-9.]/g,'');
});
  

У меня это работает нормально.. однако у меня есть требование, чтобы пользователи также могли вводить отрицательные значения .. что-то вроде -500
поэтому я немного обновил свое регулярное выражение JavaScript, добавив что-то вроде следующего..

 $('body').on('keyup', '#free_credit_amount', function(){   
   this.value = this.value.replace(/[^-0-9]/g,'');
});
  

Это также отлично работает для меня, поскольку я могу ввести minus (-) знак и могу ввести значение что-то вроде 500 или -500 однако я хочу немного дополнить это регулярное выражение.. В настоящее время, что происходит, я также могу ввести значение, подобное 500- . Это не должно быть разрешено.. Я только хочу, чтобы мой minus (-) был добавлен только в качестве первого символа..

Я пытался использовать различные другие регулярные выражения, такие как this.value = this.value.replace(/( |-)?[^-0-9]/g,''); this.value = this.value.replace(/^[-][a-zA-Z0-9.,$;]/g,'');

Но ни одно из этих регулярных выражений не работает для меня..

Может ли кто-нибудь помочь мне достичь этого, пожалуйста..

Спасибо

Комментарии:

1. Попробуйте this.value.replace(/[^-0-9] /g,'').replace(/^(-)|- /g,'$1')

2. Проблема с такого рода вмешательством в пользовательский ввод заключается в том, что у пользователя может сложиться впечатление, что его клавиатура сломана. Они также задаются вопросом, почему иногда курсор, который они переместили в начало ввода, внезапно перемещается в конец. Это совсем не удобно для пользователя.

Ответ №1:

Вы можете использовать

 $('body').on('input', '#free_credit_amount', function(){
    var position = this.selectionStart;
    var oldval = this.value;
    var newval = this.value.replace(/[^0-9.-]/g, '').replace(/^(-)|- /g,'$1').replace(/^([^.]*.)|. /g, '$1');
    this.value = newval;
    if (oldval != newval) {
        this.selectionEnd = position-1;
    }
});  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" class="form-control rounded-pill bg-light" autocomplete="off" name="free_credit_amount" id="free_credit_amount" placeholder="Free credit amount">  

Здесь,

  • .replace(/[^0-9.-]/g, '') — удаляет все символы, кроме цифр, точек и дефисов
  • .replace(/^(-)|- /g,'$1') — сохраняет дефис в начале строки и удаляет все остальные дефисы
  • .replace(/^([^.]*.)|. /g, '$1') — сохраняет любое количество текста, отличное от . и первого . , и удаляет все остальные точки в строке

Комментарии:

1. Великолепно.. Спасибо.. Сработало как шарм.