@novoselovmaks

Как разрешить ввод только цифр и одной точки с заменой запятой?

Есть форма в которой необходимо указывать только цифры и точку.

Сейчас делаю так, код ниже, вставляется одна точка, можно задавать только цифры, но запятая не заменяется на точку, как побороть?

$('#calc-form input').keydown(function(event){
    
    // Разрешаем: backspace, delete, tab и escape
    if ( event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 ||
        // Разрешаем: Ctrl+A
        (event.keyCode == 65 && event.ctrlKey === true) ||
        // Разрешаем: home, end, влево, вправо
        (event.keyCode >= 35 && event.keyCode <= 39) || event.keyCode == 190 || event.keyCode == 110 || event.keyCode == 188) {
        
        this.value = this.value.replace(/,/g, ".");

        if(this.value.match(/\./g).length >= 1) {
            this.value = this.value.substr(0, this.value.lastIndexOf("."));
        }

        return;
    } else {
        // Запрещаем все, кроме цифр на основной клавиатуре, а так же Num-клавиатуре
        if ((event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105 )) {
            event.preventDefault();
        }
    }
});
  • Вопрос задан
  • 6438 просмотров
Решения вопроса 1
devspec
@devspec
Помогло? Отметь решением
Ой, ну что вы в самом деле...
Раз уж все равно JQuery используете, так используйте JQuery Mask
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@werwolflg
Хоть и поздно, но может кому-то будет полезно, кто попадёт сюда из поиска.
$('.number-only').on('input', function(){
        this.value = this.value.replace(/[^\d\.,]/g, "");
        this.value = this.value.replace(/,/g, ".");
        if(this.value.match(/\./g).length > 1) {
            this.value = this.value.substr(0, this.value.lastIndexOf("."));
        }
    });
Ответ написан
Комментировать
profesor08
@profesor08 Куратор тега JavaScript
Ужас. Чем вам html не угодил?
Ввод чисел
Ответ написан
Комментировать
devellopah
@devellopah
адаптируй под свои нужды - https://jsbin.com/yeyafe/edit?js,output

const input = document.querySelector('input');
const pattern = /^\d+(\.?)\d*$/g;

const allowedCodes = [8, 9, 27, 35, 36, 37, 38, 39, 46, 110, 188];

input.addEventListener('input', onInput);

function onInput(e) {
	
	const value = this.value;
	
	if( !(value.match(pattern) || allowedCodes.some(code => code === e.keyCode)) ) {
		this.value = value.slice(0, -1);
	}
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы