如何使用Yup验证字符串或数字的特定长度?以邮政编码为例
Yup 验证精确长度的方法
当然有合适的方案啦!你之前用的.min(5)和.max(5)是针对数值大小或字符串最小/最大长度的,确实没法满足“恰好5位”的需求。Yup 专门提供了精确长度验证的方法,分两种场景给你说明:
1. 验证字符串类型的精确长度
如果你的字段是字符串格式(比如用户输入的邮编是字符串形式),直接用.length()方法就可以,它会严格校验字符的个数:
import * as yup from 'yup'; const schema = yup.object().shape({ zipCode: yup.string().length(5, '邮政编码必须是5位字符') });
2. 验证数字类型的精确位数
如果字段是数字类型,要注意数字本身没有length属性,所以可以通过两种方式实现验证:
方式一:转换为字符串后验证
先把数字转成字符串,再用.length()校验位数:
const schema = yup.object().shape({ zipCode: yup.number() .transform((value) => String(value)) // 将数字转为字符串格式 .length(5, '邮政编码必须是5位数字') });
方式二:自定义测试规则
用.test()写一个自定义验证逻辑,通过正则匹配恰好5位数字:
const schema = yup.object().shape({ zipCode: yup.number().test( 'is-exactly-5-digits', // 测试标识(可选) '邮政编码必须是5位数字', // 错误提示文本 (value) => { if (!value) return false; // 空值的处理可根据业务需求调整 return /^\d{5}$/.test(String(value)); // 匹配恰好5位数字的正则 } ) });
这样就能完美实现你需要的“恰好5位”的验证需求啦!
内容的提问来源于stack exchange,提问作者reectrix
相关产品推荐
相关产品推荐

