是的 - 逗号小数点分隔符而不是点

Yup - comma decimal separator instead of dot

我正在使用像这样的简单 Yup 模式来验证 React Native 中的 Formik 输入字段:

Yup.number().positive()

我的用户将对小数使用逗号分隔符,因此我需要架构为 1.35 等值抛出错误并接受 1,35 等值。使用正则表达式似乎不适合 table,因为 matches 方法仅适用于字符串。

我不知道 Yup 中的函数能够解析不同格式的数字。但一种简单的方法是 transform/replace 逗号不存在,因此它变成数字

number().transform((o, v) => parseInt(v.replace(/,/g, '')))

这样你的号码 10,000 就变成了 10000 并且确实是一个有效的号码。

另一方面 10.000 留下 10.000 无效。

在对 transform 稍加修改之后,这最终对我有用:

Yup.number()
   .transform((_, value) => {
      if (value.includes('.')) {
        return null;
      }
      return +value.replace(/,/, '.');
    })
    .positive(),