#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. Великолепно.. Спасибо.. Сработало как шарм.