Прошу прощения за многабукаф, но не могу понять суть проблемы. Вижу, что Ваш рэгексп составлен правильно.
Не понимаю, почему мой код работает:
<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>
В чем здесь ошибка?