У меня есть функция, которая отрабатывает на все инпуты. Как мне сделать так, чтобы я мог ставить или точку или запятую, но всегда значение приводилось бы к точке. Сейчас я могу ставить только точки.
onChangePrice = (e: ChangeEvent<HTMLInputElement>): void => {
const { exchange } = this.props;
const { target } = e;
let pos = target.selectionStart ?? 0;
const { name } = e.target;
const type = name.includes("sell") ? "sell" : "buy";
let precent: number | null = null;
let negative = false;
negative = exchange === "Garantex" && target.value.includes("-");
let value = target.value.replace(/[^0-9.]/g, "");
value = value.replace(/[.]/, ",");
value = value.replace(/[.]/g, "");
value = value.replace(/[,]/, ".");
if (!value) value = "0";
// while (value.startsWith('0') && value.length > 1 && parseInt(value) > 0) value = value.slice(1);
// if (value.startsWith('.')) value = 0 + value;
if (parseFloat(value) === 0) {
if (value.endsWith(".") || value.endsWith(",")) {
value = "0.";
pos = 2;
} else {
value = "0";
pos = 1;
}
}
pos -= target.value.length - value.length;
const inputNum = parseInt(name.replace(/[^0-9]/g, ""));
const precentId = type === "sell" ? 3 + (inputNum - 1) : 0 + (3 - inputNum);
precent = this.props.userData.headerPriceAdjustments[precentId];
if (negative) {
value = `-${value}`;
pos++;
}
this.changeTargetPrice(type, precent, value);
setTimeout(() => {
target.selectionStart = pos;
target.selectionEnd = pos;
}, 0.000001);
};