我有日期字段为YYYYMMDD,它的定义:
zod.string().max(8).regex(new RegExp('^(19[0-9][0-9]|20[0-9][0-9]|[0-1][0-9]{3})(1[0-2]|0[1-9])(3[01]|[0-2][1-9]|[12]0)$'));
和价值20001915
我的意思是它的定义是确定的,在在线检查器测试([https://www.regextester.com/enter链接描述在这里] 1)告诉我(月数是假的- 19),但佐德通过这个值是正确的,为什么?
1条答案
按热度按时间3qpi33ja1#
正如有人在评论中所说,正则表达式是正确的。但是,重要的是要注意,虽然zod正则表达式检查格式,但它并不根据真实世界的日期来验证日期本身的正确性。在您的示例中,值“20001915”具有正确的格式(YYYYMMDD),但它表示第19个月,该月不存在,因此外部在线检查器将其正确识别为“19”。
因此,您需要像下面这样单独验证日期:
另外,你可以像这样优化正则表达式: