regex InputNumber formateur ant-design

Aug 16 2020

Les gars, je ne comprends vraiment pas les regex, j'utilise le composant Input Number de ant-design pour créer un filtre de devises.

actuellement c'est comme ça:

 <InputNumber
    style={{ width: 175 }}
    formatter={value => `R$ ${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, 
    ".")}
    parser={value => value.replace(/[A-Z]|[a-z]|[$ ]|\.+/g, "")}
    onChange={(value) => setSelectedKeys(value ? value : [])}
  />

Le format actuel, par exemple mille cinq cents, est comme ceci: 1.500 J'en ai besoin pour accepter aussi, les nombres négatifs (-1.500) et la virgule pour les cents comme 1.500,25

Pouvez-vous m'aider ? J'ai essayé des solutions mais je ne peux pas les faire fonctionner comme j'ai besoin

Réponses

1 GiuliaLage Aug 16 2020 at 13:28

Les gars après avoir beaucoup cherché, j'ai trouvé une solution, je ne peux pas être la meilleure, mais en ce moment fait son travail.

J'ai installé les dépendances MaskedInput et text-mask-addons.

import MaskedInput from "react-text-mask";
import createNumberMask from "text-mask-addons/dist/createNumberMask";

const defaultMaskOptions = {
    prefix: "R$",
    suffix: "",
    includeThousandsSeparator: true,
    thousandsSeparatorSymbol: ".",
    allowDecimal: true,
    decimalSymbol: ",",
    decimalLimit: 2,
    integerLimit: 7,
    allowNegative: true,
    allowLeadingZeroes: false,
  };
  const currencyMask = createNumberMask(defaultMaskOptions);


const NumberFilter = (
    <Space style={{ marginRight: 20 }}>
      <MaskedInput
        mask={currencyMask}
        render={(ref, props) => (
          <Input
            placeholder="Valor inicial"
            ref={(input) => ref(input && input.input)}
            {...props}
            value={selectedKeys[0]}
            onChange={(event) => {
              props.onChange(event);
              let betweenInitial = [...selectedKeys];
              betweenInitial[0] = event.target.value;
              setSelectedKeys(betweenInitial);
            }}
          />
        )}
      />
      <RiArrowLeftRightLine />
      <MaskedInput
        mask={currencyMask}
        render={(ref, props) => (
          <Input
            placeholder="Valor final"
            ref={(input) => ref(input && input.input)}
            {...props}
            value={selectedKeys[1]}
            onChange={(event) => {
              props.onChange(event);
              let betweenFinal = [...selectedKeys];
              betweenFinal[1] = event.target.value;
              setSelectedKeys(betweenFinal);
            }}
          />
        )}
      />
    </Space>
  );