Я пытаюсь создать маску для своего html с помощью javascript. Я использую следующий код, но мне это не удалось:
function valorMax(v){
v=v.replace(/\D/g,"")
if (v.length <= 20) {
v=v.replace(/(\d{17})(\d)/,"$10000000000000.$2")
}
return v
}
Мне нужно в текстовом поле при вводе значения валюты, оно автоматически завершается с 0 (ноль) и отделяет центы с. (точка), всего 19 цифр
Пример: введите 100, и значение в текстовом поле станет 00000000000000100,00.
Пример: введите 10,25, и значение в текстовом поле станет 0000000000000010,25.
Пример: введите 1,30, и значение в текстовом поле станет 0000000000000001,30.
Кто-нибудь может мне помочь? Спасибо большое.
Вы можете использовать toFixed
с padStart
методами, чтобы добиться этого.
const padWithZeros = (number) => number.toFixed(2).toString().padStart(19, 0)
console.info(padWithZeros(100))
console.info(padWithZeros(10.25))
console.info(padWithZeros(1.3))
Таким образом, вы можете достичь решения без RegEx.
var input = '10.2'
function formatNumber(input){
var wholeNumber = input.split('.')[0]
var decimalNumber = input.split('.')[1] || ''
if (decimalNumber.length < 2){
decimalNumber = decimalNumber.concat(...new Array(2 - decimalNumber.length).fill(0))
}
if (wholeNumber.length < 17){
wholeNumber = ''.concat(...new Array(17 - wholeNumber.length).fill(0), wholeNumber)
}
console.info(`${wholeNumber}.${decimalNumber}`)
}
formatNumber(input)
Специальное назначение .toLocaleString()
— преобразование строк в чувствительные к языку форматы валюты.
// U.S. Currency
const us = (number, digits) => {
return number.toLocaleString('en-US', {
minimumIntegerDigits: digits,
useGrouping: false,
style: 'currency',
currency: 'USD'
});
}
// Generic Currency
const xx = (number, digits) => {
return number.toLocaleString(undefined, {
minimumIntegerDigits: digits,
useGrouping: false,
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
}
console.info(us(111.3, 19));
console.info(us(2500, 19));
console.info(us(.02, 19));
console.info(xx(111.3, 19));
console.info(xx(2500, 19));
console.info(xx(.02, 19));
что ты уже испробовал?