如何让yup.string()要求任意长度的字符串(包括0)
How to get yup.string() to require string of any length (including 0)
我想知道是否有人可以建议我如何让 yup 验证任何长度的字符串(包括长度 0)。
正在使用
yup.string().required().validateSync("")
将在空字符串上抛出错误...
过去推荐的方法是:
string().required().min(0)
但这种方式不再有效.. (https://github.com/jquense/yup/issues/136#issuecomment-339235070)
有人可以告诉我如何让 yup 要求发送一个字符串,但不会在长度为 0 的字符串上出错吗?
谢谢!
我的建议是放弃 .required()
,而是考虑使用 typeError
进行验证,同时启用 strict
以停止 non-string 值被胁迫转化。
这将使您能够允许任何长度的字符串值,同时仍然对非字符串的值出错。
示例:
yup.string().typeError().strict(true).validateSync(1) // Error
yup.string().typeError().strict(true).validateSync(null) // Error
yup.string().typeError().strict(true).validateSync({}) // Error
yup.string().typeError().strict(true).validateSync("") // Valid
yup.string().typeError().strict(true).validateSync("Foo") // Valid
typeError
还有一个可选的 message
参数,允许您在那里提供错误消息,如果您不想稍后再处理它。
我喜欢使用 mixed
、 test
和 typeof === 'string'
:
firstName: Yup.mixed().test(
'my test',
'error: name is not a string',
(text) => {
if (typeof text === 'string') {
return true
} else {
return false
}
}
)
Required String that can be Empty
示例字段名为:relevance_factor
与您的要求相同
let relevance_factor = yup
.string()
.test(
'string-can-be-empty',
MESSAGES.RELEVANCE_FACTOR_REQUIRED,
function stringCanBeEmpty(value: any) {
if (typeof value == 'string')
return true;
return false;
}
)
yup.string().defined().strict(true);
这也适用于 undefined
值。
我想知道是否有人可以建议我如何让 yup 验证任何长度的字符串(包括长度 0)。
正在使用
yup.string().required().validateSync("")
将在空字符串上抛出错误...
过去推荐的方法是:
string().required().min(0)
但这种方式不再有效.. (https://github.com/jquense/yup/issues/136#issuecomment-339235070)
有人可以告诉我如何让 yup 要求发送一个字符串,但不会在长度为 0 的字符串上出错吗?
谢谢!
我的建议是放弃 .required()
,而是考虑使用 typeError
进行验证,同时启用 strict
以停止 non-string 值被胁迫转化。
这将使您能够允许任何长度的字符串值,同时仍然对非字符串的值出错。
示例:
yup.string().typeError().strict(true).validateSync(1) // Error
yup.string().typeError().strict(true).validateSync(null) // Error
yup.string().typeError().strict(true).validateSync({}) // Error
yup.string().typeError().strict(true).validateSync("") // Valid
yup.string().typeError().strict(true).validateSync("Foo") // Valid
typeError
还有一个可选的 message
参数,允许您在那里提供错误消息,如果您不想稍后再处理它。
我喜欢使用 mixed
、 test
和 typeof === 'string'
:
firstName: Yup.mixed().test(
'my test',
'error: name is not a string',
(text) => {
if (typeof text === 'string') {
return true
} else {
return false
}
}
)
Required String that can be Empty
示例字段名为:relevance_factor
与您的要求相同
let relevance_factor = yup
.string()
.test(
'string-can-be-empty',
MESSAGES.RELEVANCE_FACTOR_REQUIRED,
function stringCanBeEmpty(value: any) {
if (typeof value == 'string')
return true;
return false;
}
)
yup.string().defined().strict(true);
这也适用于 undefined
值。