Показать сообщение отдельно
  #7 (permalink)  
Старый 08.04.2017, 11:49
Bab Bab вне форума
Интересующийся
Отправить личное сообщение для Bab Посмотреть профиль Найти все сообщения от Bab
 
Регистрация: 07.04.2017
Сообщений: 10

Прошу прощения за многабукаф, но не могу понять суть проблемы. Вижу, что Ваш рэгексп составлен правильно.
Не понимаю, почему мой код работает:
<script>
function check(input) {
var num = input.value.replace(/[^0-9.-]/g, '');//разрешенные знаки
var num_minus = num.replace(/.[-].*$/g, '');//минус в середине числа
num = num_minus;
var num_dot = num.replace(/\.\.*$/g, '.');//несколько точек подряд
num = num_dot;
var num_dec = num.match(/.*\.../g);//есть ли два знака
if(num_dec!=null){
	input.value = num_dec;
} else {
	input.value = num;
}
}
</script>
<form method='post' name='forma'>
<input type='text' name='balance' value='' size='11' onkeyup="check(this);" onchange="check(this);">
</form>


Его урезанная версия тоже работает:
<script>
function check(input) {
input.value = input.value.replace(/[^0-9.-]/g, '');
}
</script>
<form method='post' name='forma'>
<input type='text' name='balance' value='' size='11' onkeyup="check(this);" onchange="check(this);">
</form>


Но когда подставляю в урезанную версию Ваш рэгексп (что и хочу получить в итоге), это не работает как ожидается:
<script>
function check(input) {
input.value = input.value.replace(/^[-]?\d*(\.\d{1,2})?/g, '');
}
</script>
<form method='post' name='forma'>
<input type='text' name='balance' value='' size='11' onkeyup="check(this);" onchange="check(this);">
</form>

В чем здесь ошибка?

Последний раз редактировалось Bab, 08.04.2017 в 12:01.
Ответить с цитированием