使用 redux 形式,我如何规范化并仅允许输入类型数字上的正整数?

With redux form how can I normalize and allow only positive integers on an input type number?

我使用的是 8.3.7 版本的 redux-form,我使用的字段应该只允许接受 0-9999 范围内的正整数。

const REGEX_SPECIAL_CHARACTERS = /[@\-\_\!\#$\%\.\&]/;

<Field
    mandatory
    step={1}
    name="fieldName"
    type="number"
    min={0}
    max={9999}
    normalize={(value) => {
        console.log({value});
        return value?.split(REGEX_SPECIAL_CHARACTERS, 1).join('');
    }}
>
    Text
</Field>

我正在使用 normalize 道具来验证这一点。如果我输入 1.9,在模糊时它会设置 1,这没问题。如果我做 -0-1 或只是 -n (n = 任何数字),它只会删除整个值,留下一个空字段,我需要它总是 0 如果有任何值小于 0.

我不知道是否可以使用 format 道具但 IDK 如何使用它 => https://redux-form.com/8.3.0/docs/api/field.md/#-code-format-value-name-gt-formattedvalue-code-optional-

关于如何解决这个问题有什么想法吗?

所以这会立即删除所有非数字字符,因此只允许正整数:

const onlyDigits = new RegExp('\d+');
const parsePositiveInt = (value) => {
    const matches = value.match(onlyDigits);
    return matches ? parseInt(matches[0]) : 0;
};

// ...

normalize={(value) => parsePositiveInt(value).toString()}

它不会像您描述的那样将 1.9 转换为 1,而是将其转换为 19