Формат ввода валюты jquery

#javascript #jquery

Вопрос:

У меня возникли некоторые проблемы с созданием маски для поля валюты.

1 — Мне нужно ограничить ДО 18 символов (считая». «и»,»), например: 999.999.999.999,99

2 — Мне нужно, чтобы вы поставили более одного». » (в настоящее время только один)

3 — Мне нужно, чтобы этого не случилось:

введите описание изображения здесь

Потому что, когда я печатаю, он добавляет». » прямо перед тем, как я введу еще одно число.

Мой код:

 function onlyNumberAmount(input) {
    var v = input.value;
    v = v   '';
    v = parseInt(v.replace(/[D] /g, ''));
    v = v   '';
    v = v.replace(/([0-9]{2})$/g, ",$1");
    v = v.replace(/([0-9]{3}),([0-9]{2}$)/g, ".$1,$2");
    input.value = v;
    if(v == 'NaN') input.value = '';
} 
 <input type="text" class="form-control" id="mP0"  onkeyup="onlyNumberAmount(this)"> 

Комментарии:

1. что делать, если вы отформатируете значение при размытии ?

2. @Дани, мне нужно, чтобы это было ключевым моментом

Ответ №1:

Следующее, по-видимому, соответствует вашим требованиям.

 function onlyNumberAmount(input) {
  let v = input.value.replace(/D /g, '');
  if (v.length > 14) v = v.slice(0, 14);
  input.value =
    v.replace(/(d)(dd)$/, "$1,$2")
     .replace(/(^d{1,3}|d{3})(?=(?:d{3}) (?:,|$))/g, '$1.');
} 
 <input type="text" class="form-control" id="mP0" onkeyup="onlyNumberAmount(this)"> 

d это сокращение от [0-9] , как я уверен, вы знаете.

Положительный внешний (?=(?:d{3}) (?:,|$)) вид используется для обеспечения правильного размещения .

14 это максимальное количество цифр, которые могут появиться в строке.

Дополнительные разъяснения по запросу.

Комментарии:

1. Таааааааанкс 🙂

Ответ №2:

Если, проверьте, является ли поле уже допустимым

 const moneyTest = /(d{1,3}.)?(d{1,3}.)?(d{1,3})?(.d{1,2})?/

if (!moneyTest.test(field)) {
 

Затем, если это не так, разделитесь на числовые поля

 var digits = /d/g.match(field); // might be field.match(/d/g)
 

Теперь вам нужно посмотреть, был ли десятичный знак в исходном числе

 var dot = field.lastIndexOf(".");
 

И тогда вы должны быть хороши, чтобы восстановить номер.

Вопрос: Что произойдет, если есть две точки?

Комментарии:

1. Он может достигать 3 точек. ПРИМЕР: 9.999.999.999,00

2. @SallyNeves, так что поменяй точки и запятые в моем регулярном выражении и последнем выражении. Но что тогда произойдет, если у вас будет несколько запятых?