Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.11.2014, 07:30
Новичок на форуме
Отправить личное сообщение для Anastasi_ Посмотреть профиль Найти все сообщения от Anastasi_
 
Регистрация: 07.11.2014
Сообщений: 3

Форматирование в input ценовой информации c десятичной дробью.
Пожалуйста подскажите - как во время ввода числа в input сделать так, чтобы оно динамически форматировало данные по три знака с пробелом и после точки еще 2 числа можно ввести.
Например: ввод числа 1048766.75 сразу форматировало на 1 048 766.75?
Ответить с цитированием
  #2 (permalink)  
Старый 07.11.2014, 08:21
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,214

Сообщение от Anastasi_
ввод числа 1048766.75 сразу форматировало на 1 048 766.75?
Форматирование чисел регуляркой
Ответить с цитированием
  #3 (permalink)  
Старый 07.11.2014, 10:54
Новичок на форуме
Отправить личное сообщение для Anastasi_ Посмотреть профиль Найти все сообщения от Anastasi_
 
Регистрация: 07.11.2014
Сообщений: 3

Сообщение от ksa Посмотреть сообщение
Форматирование чисел регуляркой
Это не совсем то. Можно вводить только числовую информацию, немного доработала, но не могу сообразить как сделать, чтобы только одну точку можно было ввести
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"
Подскажите, пожалуйста.
Ответить с цитированием
  #4 (permalink)  
Старый 07.11.2014, 11:54
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,214

Сообщение от Anastasi_
не могу сообразить как сделать, чтобы только одну точку можно было ввести
Как вариант...

var re=/^\d+(.\d+)?$/;
var str='1234.1'
if (re.test(str)) {
	alert('Ok');
} else {
	alert('No');
};
Ответить с цитированием
  #5 (permalink)  
Старый 07.11.2014, 11:57
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,214

Anastasi_, вот еще статейка...
http://miha.in/ru/articles/jsnumber
Ответить с цитированием
  #6 (permalink)  
Старый 08.11.2014, 10:28
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от Anastasi_
А то сейчас можно ввести и такое "444..554...97"
И что тогда будет?
Ответить с цитированием
  #7 (permalink)  
Старый 14.11.2014, 06:28
Новичок на форуме
Отправить личное сообщение для Anastasi_ Посмотреть профиль Найти все сообщения от Anastasi_
 
Регистрация: 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 - любой разделитель, у меня пробел.
Может кто предложит проще...
Ответить с цитированием
  #8 (permalink)  
Старый 14.11.2014, 15:00
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 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.
Ответить с цитированием
  #9 (permalink)  
Старый 14.11.2014, 17:54
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Блин, сколько геморроя-то. Вычислить ввод и вывести в формате не ортодоксально что ли?

По-моему это синдром вахтера. Мучают человека всякими правилами-законами, и вот он дорвался до креатива и будучи измученным начинает мучить других тем же самым. Ну или типа дедовщины что ли.

Я даже проверил (хоть и так помнил) что даже в таких могучих програх как Корел или ФШ - ввод вычисляется и форматируется. Корел молча кладет на ошибки, ФШ пикает падла.

Но никому в голову не пришло в этих корпорациях запрещать вводить какие-то символы.

Избавляйтесь от синдрома вахтера. Юзер ввел - не тупой, а для тупых - бип и красная рамка - введи тупой правильно, вот так: пример.
Ответить с цитированием
  #10 (permalink)  
Старый 14.11.2014, 17:58
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Более того, ТС вообще не понимает что все устроено в точности наоборот. Юзер вводит как хочет, а записывается - как надо. Затем при воспроизведении юзеру показывают как он привык.

Дебильный ввод попросту не имеет смысла, никакой дурак кроме воображаемого ТС не будет писать 123....456...789. Так не бывает.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При добавлении DOCTYPE "плывут" размеры input type=text Demath (X)HTML/CSS 4 08.07.2012 19:27
Разным элементам input - разное форматирование. Как? eclipse (X)HTML/CSS 1 25.10.2007 13:55