PayloadCMS 1.11.2数字字段正则验证重复点击保存失效求助
问题解决:PayloadCMS 1.11.2 中number字段重复保存验证异常
问题根源
重复点击保存时正确值触发错误的核心原因是正则表达式使用了全局标志g。带有g标志的正则会维护lastIndex状态,每次调用test()方法时会从该索引位置开始匹配,导致重复调用时结果交替为true和false,进而触发错误提示。
同时你的正则表达式本身存在错误:/20[2-9][/\d]/g里的/是多余字符,且缺少首尾锚定符,会导致部分匹配(比如"202a"这类不符合要求的值也能通过前几位匹配)。
修复方案
- 移除正则的全局标志
g,消除状态残留问题 - 修正正则表达式,使用首尾锚定符
^和$确保匹配完整的四位年份(范围限定在2020-2099) - 简化验证逻辑(利用Payload自带的必填验证处理空值)
修正后的issue_year字段代码如下:
{ type: "number", name: "issue_year", label: "year of issue", required: true, validate: (val) => { // 匹配2020-2099之间的完整四位年份 const pattern = /^20[2-9]\d$/; if (val) { return pattern.test(val.toString()) ? true : "invalid year of issue"; } // 字段已设置required,空值会被Payload自带验证拦截,无需额外判断 return true; }, }
内容的提问来源于stack exchange,提问作者alveomaster
相关产品推荐
相关产品推荐

