我正在使用Yup来验证我的表单。在我的一种形式中,我想验证<input type="file" />
一个文件是否存在。
我已经测试过这个(它不起作用):
Yup.object().shape({
file: Yup.object().shape({
name: Yup.string().required()
}).required('File required')
Run Code Online (Sandbox Code Playgroud)
我在控制台中有以下错误消息:
file 必须是一种
object
类型,但最终值是:(null
从值转换{}
)。如果“null”打算作为空值,请确保将架构标记为.nullable()
任何的想法?
我正在尝试用Yup验证电话号码:
phone: Yup.number()
.typeError("That doesn't look like a phone number")
.positive("A phone number can't start with a minus")
.integer("A phone number can't include a decimal point")
.min(8)
.required('A phone number is required'),
Run Code Online (Sandbox Code Playgroud)
.min(8)
验证该数字是否为8或更多.所以简单输入8
就会通过.如何才能使8个字符需要1000 0000
才会通过?
是否可以仅在字段存在时验证该字段?
我将创建一个应用程序。字段(电子邮件)可能会/可能不会显示在步骤 2 中,这取决于步骤 1 的选择选项。问题是我不能 put email: Yup.string().Required()
,它会导致验证一直运行,即使该字段没有显示。
我在 reactjs 中使用 formik 进行表单管理,我有一个关于验证的问题。
我有两个字段,一个是选择国家的选择控件,另一个是邮政编码。
在 country 数组中,我们有正则表达式来验证邮政编码,其想法是使用当前所选国家/地区的正则表达式验证输入的邮政编码,有人可以提供有关如何执行此操作的线索。
我想在 formik 中使用 yup 验证我的表单。假设我有 4 个字段 A、B、C、D,它们都是字符串。如果我想让至少一个字段不为空,我应该如何编写验证模式,那么这是一个有效的表单?提前致谢!
我有一个这样的数据结构:
{
"subject": "Ah yeah",
"description": "Jeg siger...",
"daysOfWeek": [
{
"dayOfWeek": "MONDAY",
"checked": false
},
{
"dayOfWeek": "TUESDAY",
"checked": false
},
{
"dayOfWeek": "WEDNESDAY",
"checked": true
},
{
"dayOfWeek": "THURSDAY",
"checked": false
},
{
"dayOfWeek": "FRIDAY",
"checked": false
},
{
"dayOfWeek": "SATURDAY",
"checked": true
},
{
"dayOfWeek": "SUNDAY",
"checked": true
}
],
"uuid": "da8f56a2-625f-400d-800d-c975bead0cff",
"taskSchedules": [],
"isInitial": false,
"hasChanged": false
}
Run Code Online (Sandbox Code Playgroud)
在daysOfWeek
我想确保至少有一个项目有checked: true
.
到目前为止,这是我的验证模式(但不起作用):
const taskValidationSchema = Yup.object().shape({
subject: Yup.string().required('Required'),
description: Yup.string(),
daysOfWeek: Yup.array()
.of( …
Run Code Online (Sandbox Code Playgroud) 我正在使用在架构上定义的 Formik React Form 和 Yup 验证:
export const Contact = yup.object<IContact>().shape({
contactName: yup
.string()
.trim('The contact name cannot include leading and trailing spaces')
.strict(true)
.min(1, 'The contact name needs to be at least 1 char')
.max(512, 'The contact name cannot exceed 512 char')
.required('The contact Name is required'),
});
Run Code Online (Sandbox Code Playgroud)
有没有办法让 Yup 修剪空白而不显示消息?那么在提交表单时自动修剪空格?
我正在尝试yup
使用formik
. 我的验证似乎有效,但我觉得它太冗长了。
试图使用 的.addMethod()
功能yup
,但在语法上陷入困境,或者这可能是矫枉过正?
摘要:我想将我的验证转换为使用yup.addMethod()
.
实际验证:
import * as yup from 'yup'
const countryNameRegex = /[A-Za-z]/g;
const countryCodeRegex = /[a-zA-Z]{2,}/g;
const isRequired = 'Required Field'
const isCorrectFormat = 'The country name may contain only letters'
const countryValidationSchema = yup.object().shape({
name: yup.string()
.min(3, `country name must contain at least 3 characters`)
.matches(
countryNameRegex,
{
message: isCorrectFormat,
excludeEmptyStrings: true
}
)
.label(`Country Name`)
.required(isRequired),
code: yup.string()
.length(2, `The country code must be …
Run Code Online (Sandbox Code Playgroud) 我有以下是检查:
nrOfApples: yup.number().min(0).max(999),
Run Code Online (Sandbox Code Playgroud)
现在,如果我将该字段留空,它将验证为 false。有没有办法让 yup.number() 接受空值?我试过了:
yup.number().nullable()
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用。关于如何让这种事情发生的任何想法?
我见过的大多数答案在定义模式时都会自定义 yup 验证消息,例如
const personSchema = yup.object().shape({
firstName: yup.string().required('First name is a required field'),
lastName: yup.string().required('Last name is a required field'),
});
Run Code Online (Sandbox Code Playgroud)
但是如果我想自定义默认验证消息本身怎么办?例如,必填字段应始终呈现固定字符串“必填字段”。