Как форматировать в input ценовую информацию?
Весь инет облазил. Никак не могу найти. Пожалуйста подскажите - как при вводе цены в поле input сделать так, чтобы оно динамически форматировало данные по три знака с пробелом.
Например: при вводе 940000000 сразу форматировало на 940 000 000. Буду крайне признателен за информацию. Заранее спасибо. |
<input id="inp"> <script> input= document.getElementById("inp"); input.onkeyup = input.onchange= input.onpaste= function(){ this.value= this.value.replace(/[^\d]/g, "").replace(/\d{3}(?!$|(?:\s$))/g, "$& "); }; </script> P. S. Вообще, нужно ограничить нажатия всех клавиш, кроме цифр (ну и стрелок там, шифтов и т.д.) |
Уважаемый trikadin, большое спасибо за ответ. Единственный момент. Так как это именно финансовая информация, то форматирование должно автоматически идти с права налево по три символа и пробел.
А именно, цифра из четырех символов это 9 400; при добавление еще одной цифры форматироваться в 94 000; еще одной в 940 000 и т.д. Буду очень признателен за совет. |
<input id="input"> <script>(function(){ var handler = function(data){ return data.split(/(\d{3})/).join(' ').replace(/\s+/g, ' ').replace(/^\s+/, '').replace(/\s+$/, ''); }, lastValue = '', input = document.getElementById('input'); if(input.addEventListener)input.addEventListener('input', function(){ this.value = handler(this.value); }, false); else if(input.attachEvent) input.attachEvent('onpropertychange', function(){ if(window.event.propertyName == 'value' && window.event.propertyName != lastValue){ this.value = lastValue = handler(this.value); } }); }());</script> Что то кривая регулярка вышла %) |
mistermandarin, а, ну да, тупанул. Nekromancer, при всём уважении, код глючит.
Сейчас подумаю... |
Уважаемый trikadin, скрипт, к сожалению, перестал работать. Не могли бы его подшаманить? Спасибо.
|
trikadin,
Да, я заметил. Уже нет вроде. |
Уважаемый Nekromancer, все же можно как то настроить скрипт именно на финансовые данные. Смысл в том, что бы пробел ставился после каждой третьей цифры справа! А в Вашем варианте получается при вводе цифры 1233, форматирование в 123 3, тогда как хотелось бы 1 233. В любом случае спасибо за то, что откликнулись. :)
|
Ничего умнее в голову мне не пришло...
<input id="inp"> <script> (function(){ var prev_value=""; var input= document.getElementById("inp"); input.onkeyup = input.onchange= input.onpaste= function(){ this.value= this.value.replace(/[^\d\s]/g, ""); if (prev_value==this.value)// отслеживаем изменение значения return; prev_value= this.value; this.value= this.value.replace(/[^\d]/g, "").split("").reverse().join("").replace(/\d{3}(?!$|(?:\s$))/g, "$& ").split("").reverse().join(""); // Уууу, цепочки!.. }; })(); </script> Всё. Окончательный мой вариант)) |
Уважаемый trikadin. ТО ЧТО НАДО. Огромное человеческое СПАСИБО:thanks: !!!
|
trikadin,
я тоже приблизительно к этому пришёл) Правда если зажимать цифру, то оно всё равно глючит :) |
Цитата:
И вообще много всяких проверок нужно приделать - но это уже его проблемы, я показал идею) Мавр сделал своё дело... |
И вообще, финансовые данные больше четырёх цифр вводятся обычно НУ ОЧЕНЬ осмысленно и вдумчиво. :D
Так что риска мало. |
Ага, даёшь и на сервере кривые скрипты при работе с финансовыми операциями ))
|
Цитата:
|
Вариант регулярки ...
var a = "123 45 6775 8" a = a.replace(/\s+/g, "").match(/(\d{1,3})(?=((\d{3})*([^\d]|$)))/g).join(" ") alert(a) |
Цитата:
|
Уже всё ок) Прикольно. Но не факт, что быстрее) |
trikadin, да, работает. Если поизвращаться, то всё можно конечно сделать красиво. Но опять же, тормозить будет.
|
Цитата:
|
|
Цитата:
Подскажите, пожалуйста, у меня есть инпут, в котором работает пробел при изменении. А как сделать пробел сразу при загрузке страницы? <input type="text" value="3432424" id="cif" /> <script> var input = document.getElementById("cif"); input.onkeyup = input.onchange= input.onpaste = function(){ this.value= this.value.replace(/\s+/g, "").match(/(\d{1,3})(?=((\d{3})*([^\d]|$)))/g).join(" "); }; </script> |
У меня получилось так:
<body onload="ly()"> <input type="text" value="3432424" id="cif" /> <script> var input = document.getElementById("cif"); input.onkeyup = input.onchange= input.onpaste = function(){ this.value= this.value.replace(/\s+/g, "").match(/(\d{1,3})(?=((\d{3})*([^\d]|$)))/g).join(" "); }; function ly(){ input.value = input.value.replace(/\s+/g, "").match(/(\d{1,3})(?=((\d{3})*([^\d]|$)))/g).join(" "); } </script> </body> Может есть более изящный способ :) ? |
qwe88,
<body onload="input.onkeyup()"> <input type="text" value="3432424" id="cif" /> <script> var input = document.getElementById("cif"); input.onkeyup = input.onchange= input.onpaste = function(){ this.value= this.value.replace(/\s+/g, "").match(/(\d{1,3})(?=((\d{3})*([^\d]|$)))/g).join(" "); }; </script></body> |
Вот это некропост, лол.
|
Часовой пояс GMT +3, время: 20:20. |