Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > проблема с запятой при вводе сумм с копейками


Автор: Zzet 10.2.2010, 15:28
Здравствуйте! В поле «К оплате», набираю какую либо сумму с копейками(стоит здесь проверка на число/нечисло), но если нажать на запятую данные возвращаются на предыдущее значение, которое там было(вставил такую обработку, но как в этой обработке, исключить ситуацию с запятой?). Могут быть недовольства у пользователей по этому поводу. Как исправить ситуацию?

Автор: bars80080 10.2.2010, 15:37
удаляй запятую, а не возвращай на прежнее значение

Автор: Zzet 10.2.2010, 15:42
bars80080, как ее удалить, когда ее должен видеть пользователь? 

Автор: 12345c 10.2.2010, 16:22
Zzet, просто в проверку на число-не число добавляете "." и ",".
Код

/(\d|+|-)[0-9.,]*/.test(этот_input.value)

Автор: Zzet 10.2.2010, 18:21
12345c Вот мой код:
Код

    function change(my, idu)
    {
       var summ=document.getElementById("suma");
       var elem=document.getElementById("cb"+my+"_"+idu);
       var ein=document.getElementById("n"+my+"_"+idu);
       var esum=document.getElementById(my);
       var esumall=document.getElementById("suma");
       if (isNaN(ein.value))
       {
             var v=ein.value;
             ein.value=value;//возвращаем старое значение
             //ein.focus();
             //alert("Вы поставили не число: "+v);
             ein.focus();
             return;
       }
       if (!elem.checked) return;
       //отнимаем старые значения
       esumall.value=(parseFloat(esumall.value)-value).toFixed(2);
       esum.innerHTML=(parseFloat(esum.innerHTML)-value).toFixed(2);
       //прибавляем новые
       value=parseFloat(ein.value);
       esumall.value=(parseFloat(esumall.value)+value).toFixed(2);

       document.getElementById("splata").value=esum.innerHTML=(parseFloat(esum.innerHTML)+value).toFixed(2);
       rashet(summ);
    }


 куда мне поставить
Цитата

код Javascript
1:
/(\d|+|-)[0-9.,]*/.test(этот_input.value)


Автор: 12345c 11.2.2010, 00:39
Вместо isNaN(ein.value) - 
Код

! /^(\d|\+|-)[0-9.,]*$/.test(ein.value)

Автор: Zzet 11.2.2010, 12:36
12345c,  делаю так, но отладчик выдает ошибку
Код

invalid quantifier +|-)[0-9.,]*
 if (! /(\d|+|-)[0-9.,]*/.test(ein.value))\n


Автор: 12345c 11.2.2010, 13:50
Код

! /^(\d|\+|-)[\d.,]*$/.test(ein.value)

Автор: Amphiluke 11.2.2010, 14:48
12345c, а точку не надо ли экранировать?

Автор: Zzet 11.2.2010, 17:29
12345c, спасибо!
Amphiluke, что Вы имеете ввиду?

Автор: Amphiluke 11.2.2010, 17:46
Цитата(Zzet @  11.2.2010,  20:29 Найти цитируемый пост)
что Вы имеете ввиду?

Код

! /^(\d|\+|-)[\d\.,]*$/.test(ein.value)

 smile

Если не экранировать, мне немного непонятен смысл регулярного выражения, а именно сочетание точки и квадратных скобок... Вот и спрашиваю.

Автор: 12345c 11.2.2010, 17:54
Amphiluke, в [] точку экранировать не надо.
alert(/^(\d|\+|-)[\d.,]*$/.test('3456.w')) - даёт false, alert(/^(\d|\+|-)[\d.,]*$/.test('3456.')) - true.

Автор: Amphiluke 11.2.2010, 18:06
Понятно.
Просто я подумал, что если точка соответствует любому символу, то тогда регулярное выражение «[.]» эквивалентно просто «.»  А оно вон как, оказывается.  smile  (Впрочем, с экранировкой тоже, вроде, работает).

Автор: Zzet 11.2.2010, 18:06
что-то не очень хорошо получается. Пользователь вводит, к примеру, 1,,,,33 в текстовое поле, но так ведь нельзя! нужна одна запятая, и в целом код не воспринимает это значение как число...

Автор: Amphiluke 11.2.2010, 18:15
Zzet, попробуйте
Код

/^(\d|\+|-)\d*[.,]?\d*$/.test(ein.value)

Автор: Zzet 11.2.2010, 18:23
Amphiluke, попробавал . Значение 1,33 не число, соответсвенно часть ,33 не участвует в пересчетах на странице, и при записи в базу не проходит тоже...

Автор: Amphiluke 11.2.2010, 18:43
Цитата(Zzet @  11.2.2010,  21:23 Найти цитируемый пост)
Значение 1,33 не число

Что-то я не врубился совсем.
Код

if (/^(\d|\+|-)\d*[.,]?\d*$/.test('1,33')) alert("1,33 is a number");


Автор: Zzet 11.2.2010, 19:11
Значение 1,33=1+0,33. Запятая ставится на клавиатуре там, где буквы. В результате 1 берет в расчеты, а 0,33 нет

Добавлено через 42 секунды
и запись в базу тоже не происходит...

Автор: 12345c 12.2.2010, 00:13
Цитата(Zzet @  11.2.2010,  18:23 Найти цитируемый пост)
Значение 1,33 не число, соответсвенно часть ,33 не участвует в пересчетах на странице, и при записи в базу не проходит тоже...
Это может уже сервер не переваривать "," или прочие скрипты. Делайте replace(/,/g,'.') перед передачей или расчётами.

Добавлено @ 00:20
А что до ",,,,," - ставьте другой подходящий регексп ( /^\d+[.,]?\d*$/ ) .

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)