我希望TextInput
正确地验证16位数字。我尝试了以下方法:
yup.number()
.test('len', 'Must be exactly 16 numbers', val => val.length === 16)
但是,每次我在该字段中键入任何内容时,都会得到以下信息:
可能的未处理的承诺拒绝
我尝试了以下方法:
yup.number().max(16)
但是,即使我准确输入了16位数字,它仍然会抛出一个错误,提示它必须小于或等于16个字符。
更新了实现:
<Formik
initialValues={{ someInput: Number }}
onSubmit={submitHandler}
validationSchema={yup.object().shape({
someInput: yup
.number()
.test('len', 'Must be exactly 16 numbers', val => val.toString().length === 16)
.positive()
.integer()
.required(),
})>
以下是我的TextInput
<TextInput
value={values.someInput}
onChangeText={handleChange('someInput')}
onBlur={() => setFieldTouched('someInput')}
placeholder="some input"
style={styles.someInput}
/>
{touched.someInput && errors.someInput &&
<Text style={{ fontSize: 10, color: 'red' }}>{errors.someInput}</Text>
}
答案 0 :(得分:1)
这是因为数字没有length
属性。您需要先将其转换为字符串。另外,检查数字上的max
会在任何大于16的数字而不是大于16位数字的数字上出错。
yup.number()
.test('len', 'Must be exactly 16 numbers', val => val.toString().length === 16)