在Formik中使用React输入蒙版(InputMask)

时间:2019-10-24 20:25:53

标签: reactjs formik input-mask

我的问题有点类似于this这样的问题,但是我无法获得该值(仅数字)。

我有以下formikField

<Field
  name={`phoneNumber.value`}
  label="Phone Number"
  render={({ field }: any) => (
    <InputMask
      {...field}
      mask="(999) 999-9999"
      placeholder="Enter your phone number"
      type="text"
      onChange={(e: any) => {
        const val = e.target.value.match(/(\d+)/);
        console.log(val);
        formikProps.setFieldValue(
          `phoneNumber.value`,
          e.target.value,
        );
      }}
    />
  )}
  component={TextField}
/>

我的值像下面的"value":"(213) 456-7883"一样出现,但是我只想要数字(1234567883)。我浏览了与formik相关的多个线程,但未能到达任何地方。

有其他方法吗?

1 个答案:

答案 0 :(得分:1)

您正在将formik字段值设置为输入掩码的结果,该输入掩码仍包含格式化的文本。如果只需要数字,则可以在设置字段值之前使用正则表达式删除所有非数字值。

onChange={(e) => {
  formikProps.setFieldValue(
    'phoneNumber.value',
     e.target.value.replace(/\D/g, '') // removes all non-numeric characters
  );
}}

此外,您尝试使用正则表达式匹配数字,但仅使用e.target.value而不是使用正则表达式,然后将结果传递给setFieldValue