#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, так что поменяй точки и запятые в моем регулярном выражении и последнем выражении. Но что тогда произойдет, если у вас будет несколько запятых?