07.11.2014, 07:30
|
Новичок на форуме
|
|
Регистрация: 07.11.2014
Сообщений: 3
|
|
Форматирование в input ценовой информации c десятичной дробью.
Пожалуйста подскажите - как во время ввода числа в input сделать так, чтобы оно динамически форматировало данные по три знака с пробелом и после точки еще 2 числа можно ввести.
Например: ввод числа 1048766.75 сразу форматировало на 1 048 766.75?
|
|
07.11.2014, 08:21
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,225
|
|
Сообщение от Anastasi_
|
ввод числа 1048766.75 сразу форматировало на 1 048 766.75?
|
Форматирование чисел регуляркой
|
|
07.11.2014, 10:54
|
Новичок на форуме
|
|
Регистрация: 07.11.2014
Сообщений: 3
|
|
Это не совсем то. Можно вводить только числовую информацию, немного доработала, но не могу сообразить как сделать, чтобы только одну точку можно было ввести
function splitNums(delimiter, str){
str = str.replace(/[^(\d)*((\.){1}?\d*)?$]/g, "");
str = str.replace(/(\d+)(\.\d+)?/g,
function (c, b, a) {
return b.replace(/(\d)(?=(\d{3})+$)/g, '$1' + delimiter) + (a ? a : '')
}
);
return str;
}
А то сейчас можно ввести и такое "444..554...97"
Подскажите, пожалуйста.
|
|
07.11.2014, 11:54
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,225
|
|
Сообщение от Anastasi_
|
не могу сообразить как сделать, чтобы только одну точку можно было ввести
|
Как вариант...
var re=/^\d+(.\d+)?$/;
var str='1234.1'
if (re.test(str)) {
alert('Ok');
} else {
alert('No');
};
|
|
07.11.2014, 11:57
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,225
|
|
|
|
08.11.2014, 10:28
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Сообщение от Anastasi_
|
А то сейчас можно ввести и такое "444..554...97"
|
И что тогда будет?
|
|
14.11.2014, 06:28
|
Новичок на форуме
|
|
Регистрация: 07.11.2014
Сообщений: 3
|
|
Было решено вот так:
//ввод чисел в формате
function splitNums(delimiter, str) {
if (str == '.') return '';
str = str.replace(/[^\d\.]/g, "");
str = str.replace(/(\.)(.*?)\1/ig, '$1$2');
str = str.replace(/(\d+)(\.\d+)?/g,
function (c, b, a) {
return b.replace(/(\d)(?=(\d{3})+$)/g, '$1' + delimiter) + (a ? a : '')
}
);
return str;
}
Позволяет вводить только числа в формате 12 000.475. delimiter - любой разделитель, у меня пробел.
Может кто предложит проще...
|
|
14.11.2014, 15:00
|
Профессор
|
|
Регистрация: 09.11.2014
Сообщений: 610
|
|
мои 5 копеек
<html>
<head>
<meta charset="windows-1251">
</head>
<body>
<input id="input" />
<script>
input=document.querySelector("#input")
input.oninput=function(){
var s=this.value
s=s.replace(/(^\d|\d{3}\.\d{2}|\d{3}(?!($|\.)))/g, "$1 ")
s=s.replace(/\s+/g, " ")
this.value=s
}
</script>
</body>
</html>
Тут надо еще прибить валидацию. Например, такие числа как 11.11 следует считать недопустимыми, иначе работать не будет
Последний раз редактировалось krutoy, 14.11.2014 в 15:06.
|
|
14.11.2014, 17:54
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Блин, сколько геморроя-то. Вычислить ввод и вывести в формате не ортодоксально что ли?
По-моему это синдром вахтера. Мучают человека всякими правилами-законами, и вот он дорвался до креатива и будучи измученным начинает мучить других тем же самым. Ну или типа дедовщины что ли.
Я даже проверил (хоть и так помнил) что даже в таких могучих програх как Корел или ФШ - ввод вычисляется и форматируется. Корел молча кладет на ошибки, ФШ пикает падла.
Но никому в голову не пришло в этих корпорациях запрещать вводить какие-то символы.
Избавляйтесь от синдрома вахтера. Юзер ввел - не тупой, а для тупых - бип и красная рамка - введи тупой правильно, вот так: пример.
|
|
14.11.2014, 17:58
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Более того, ТС вообще не понимает что все устроено в точности наоборот. Юзер вводит как хочет, а записывается - как надо. Затем при воспроизведении юзеру показывают как он привык.
Дебильный ввод попросту не имеет смысла, никакой дурак кроме воображаемого ТС не будет писать 123....456...789. Так не бывает.
|
|
|
|