使用 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
。
我使用的是 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
。