Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как использовать разряды и сотые после запятой? (https://javascript.ru/forum/misc/85949-kak-ispolzovat-razryady-i-sotye-posle-zapyatojj.html)

accountnujen 22.06.2024 00:20

Как использовать разряды и сотые после запятой?
 
Уже третий час мучаюсь chatgpt.
Я пытаюсь в input text добавить разряды.
Пользователь должен иметь возможность написать сумму с копейками и это число должно поделиться на разряды. У меня возникают сложности с сотыми (копейками) и их ограничение. Если пользователь указал 1.23 , то дальше писать ему нельзя.

Слева - что пользователь пишет, справа - что должен получить в input при наборе текста.
1024,56 - 1 024,56
12 - 12
33,33 - 33,33
456.4 - 456.4
10000.01 - 10 000.01

deniscikasov@gmail.com 22.06.2024 10:27

https://codepen.io/Denisssss1ad/pen/...L?editors=1111 посмотри так ли

<input type="text" id="myInput" placeholder="Enter a number">

const inputField = document.getElementById('myInput');

    inputField.addEventListener('input', (e) => {
      const value = e.target.value.replace(/[^\d.,]/g, ''); 
      const [integer, decimal] = value.split('.'); 
      let formattedValue = '';

     
      formattedValue += integer.replace(/\B(?=(\d{3})+(?!\d))/g, ' '); 

      
      if (decimal) {
        formattedValue += ',' + decimal; 
      }

      e.target.value = formattedValue;
    });


Как нибудь сам объедини эти фрагменты, вроде всё, как ты просил
inputField.addEventListener('input', (e) => {
  const value = e.target.value;
  const [integerPart, decimalPart] = value.split(',');

  if (integerPart && integerPart.length > 12) {
    e.target.value = integerPart.substring(0, 12);
  }

  if (decimalPart && decimalPart.length > 2) {
    e.target.value = `${integerPart},${decimalPart.substring(0, 2)}`;
  }
});

Aetae 22.06.2024 12:16

Используй для этого готовые библиотеки, например https://imask.js.org/guide.html#masked-number .
Они предусматривают кучу мелочей и удобств, вроде сохранения положения каретки. За тот костыль который ты руками напишешь пользователи тебя возненавидят.


Часовой пояс GMT +3, время: 13:42.