I'm unable to figure out how to check for the number of digits in a number using Zod.
Since I'm converting my string value to a number, I'm unable to use min() or max() to check for the number of digits.
I've tried using lte() and gte() the following when building my schema:
export const MySchema = z.object({
type1: z.coerce.string(),
type2: z.coerce.string(),
type4: z.coerce.number().lte(5).gte(5),
type5: z.coerce.number()
})
My goal is to limit type4
to a fix length of 5 digits for validation. What could be an alternative solution? Maybe checking the string length before converting to a number?
If the number must be an integer, this can be achieved with no special transforms or preprocesses:
// Omitting the wrapper stuff
z.coerce.number() // Force it to be a number
.int() // Make sure it's an integer
.gte(10000) // Greater than or equal to the smallest 5 digit int
.lte(99999) // Less than or equal to the largest 5 digit int
If the number can be a decimal, then the other answer to this question is probably your best bet.