@ceeed

Как мне сделать чтобы я мог вводить в поле либо точку либо запятую, вместе с цифрам?

У меня есть функция, которая отрабатывает на все инпуты. Как мне сделать так, чтобы я мог ставить или точку или запятую, но всегда значение приводилось бы к точке. Сейчас я могу ставить только точки.

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);
  };
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ответы на вопрос 1
@BFSold1er
value = value.replace(/[.]/, ",");
    value = value.replace(/[.]/g, "");
    value = value.replace(/[,]/, ".");

заменить на

value = value.replace(/[,]/g, ".");
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы