Я предлагаю отслеживать проверку правильности ввода с помощью регулярного выражения /^(\d*)([,.]\d{0,2})?$/
, которое позволяет вводить любые 0 или более цифр в начале, а затем необязательную подстроку ,
или .
, а затем 0, 1 или 2 цифры. Если есть совпадение, переформатируйте значение, заменив ,
на .
. Если входное значение не совпадает, замените его последним подходящим значением (например, введите для этого переменную с именем prevValue
).
После того, как вы хотите передать это значение, вам нужно убедиться, что значение в окончательном формате, то есть не должно быть .
в конце. Чтобы включить это, добавьте атрибут pattern
к вашему <input>
и присвойте ему регулярное выражение ^\d+(?:\.\d{1,2})?$
. Здесь, это уже потребует 1+ цифр в начале строки, а затем будет соответствовать необязательной подстроке .
, за которой следуют 1 или 2 цифры. См. демонстрационное выражение . Поскольку запятая будет заменена точкой, вам не нужен шаблон [.,]
, достаточно \.
.
Кроме того, рекомендуется обрабатывать изменение входного значения при paste
. * 1021. *
var prevValue = "";
var patt = /^(\d*)([,.]\d{0,2})?$/;
function validateCurrencyPattern(price){
var matchedString = price.match(patt);
if (matchedString) {
prevValue = matchedString[1] + (matchedString[2] ? matchedString[2].replace(",", ".") : "")
return prevValue;
}
else {
return prevValue;
}
}
$(document).on("keypress keyup blur paste","#field", function (event) {
$(this).val(validateCurrencyPattern($(this).val()));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
<input type="text" id="field" name="field" pattern="^\d+(?:\.\d{1,2})?$"/>
<input type="Submit"/>
</form>