我想验证一个电话号码。如果它有一个值,那么它应该输出“无效的移动的号码格式”。如果为空,则应输出“需要移动的号码”。
目前,它总是输出为“无效的移动的号码格式”。
我使用Zod
、react-hook-form
和libphonenumber-js
import { isValidPhoneNumber } from "libphonenumber-js";
...
const schema = zod.object({
firstName: zod
.string({
required_error: "First name is required.",
})
.nonempty("First name is required."),
lastName: zod
.string({
required_error: "Last name is required.",
})
.nonempty("Last name is required."),
contactNumber: zod
.string({
required_error: "Mobile number is required.",
})
.transform((value) => `+${value}`)
.refine(isValidPhoneNumber, "Invalid mobile number format.")
.transform((value) => value.slice(1)),
});
...
<Controller
control={control}
name="contactNumber"
rules={{ required: true }}
render={({ field: { ref, ...field }, ...props }) => (
<StyledPhoneInput
enableSearch
enableTerritories
specialLabel="Mobile number "
inputProps={{
ref,
required: true,
placeholder: "+84",
}}
country={"vn"}
autoFormat
field={field}
muiProps={{ required: true, fullWidth: true }}
{...props}
/>
)}
/>
1条答案
按热度按时间ljsrvy3e1#
我不知道什么是最小有效电话号码,但基本上看起来你需要验证
contactNumber
字段上的一些最小输入。据我所知,指定required_error
prop似乎只需要一个 defined 值。例如,如果你有 just
firstName: zod.string({ required_error: "First name is required." })
,那么值""
被接受,而undefined
抛出错误"First name is required."
。.nonempty
验证器似乎将字符串强制转换为字符数组,并Assert它不为空。您可以Assert
contactNumber
也有一些最小的非零输入量。范例: