使用REDUX形式,如何将输入类型编号上的正整数归一化并仅允许正整数?

发布于 2025-01-22 14:00:09 字数 1050 浏览 0 评论 0 原文

我使用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>

我正在使用归一化 prop来验证这一点。如果我输入 1.9 ,则可以在Blur上设置 1 ,这是可以的。如果我执行 -0 -1 或只是 -n (n =任何数字),它只会删除整个值,留下一个空字段和空字段如果有任何值少于 0 ,我需要始终是 0

我不知道是否可以使用格式 prop,但idk如何使用=&gt; https://redux-form.com/8.3.0/docs/api/field.md/#-code-format-value-name-name-gt-formatt-formattedvalue-code-optional-

noreferrer 关于我如何解决这个问题?

I am on 8.3.7 version of redux-form, I am using the Field which should be allowed to accept ONLY positive integers between the range 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>

I am using the normalize prop to validate this. If I enter 1.9, on blur it will set 1 which is ok. If I do -0 or -1 or just -n (n = any number) it just removes the entire value leaving an empty field and I need it to be ALWAYS 0 if there is whatever value going less than 0.

I do not know if maybe using the format prop but IDK how to use it => https://redux-form.com/8.3.0/docs/api/field.md/#-code-format-value-name-gt-formattedvalue-code-optional-

So any ideas on how I can fix this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

他夏了夏天 2025-01-29 14:00:09

因此,这会立即删除任何不是数字的字符,因此只允许正整数:

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

So this would immediately remove any characters that are not digits, thus only allowing positive integers:

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

// ...

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

It's not converting 1.9 to 1 as you described, it would rather turn this into 19.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文