You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase规则中生日验证正则表达式适配问题

解决Firebase规则中生日正则验证的错误问题

这个问题我之前也碰到过,Firebase规则使用的是RE2正则引擎,而且对锚点^的使用有严格限制——它不允许在正则表达式的中间位置出现^,而你的原正则是把三个独立的完整匹配分支(每个都带^和$)用|拼接,这就导致了中间的^触发了错误提示。

具体调整步骤:

  • 合并锚点:把所有匹配分支放到同一个^(开头)和$(结尾)的包裹中,去掉每个分支单独的^和$,这样整个正则只做一次全字符串匹配,避免了多个^的问题。
  • 正确转义反斜杠:在Firebase规则的JSON字符串里,单个反斜杠\需要写成\\才能被正确解析,所以原正则里的\/、\1、\2等都要改成\\/、\\1、\\2。

修改后的Firebase规则代码:

".validate": "newData.isString() && newData.val().matches(/^(?:(?:31(\\/|-|\\.)(?:0?[13578]|1[02]))\\1|(?:(?:29|30)(\\/|-|\\.)(?:0?[13-9]|1[0-2])\\2)|(?:29(\\/|-|\\.)0?2\\3(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))|(?:0?[1-9]|1\\d|2[0-8])(\\/|-|\\.)(?:(?:0?[1-9])|(?:1[0-2]))\\4)(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$/)",

验证逻辑说明:

修改后的正则和你原来的逻辑完全一致,依然能正确验证:

  • 31天的月份(1、3、5、7、8、10、12月)的日期
  • 30天的月份(4、6、9、11月)的日期
  • 闰年2月29日的特殊情况
  • 1-28日的通用日期格式
  • 支持/、-、.三种分隔符,且分隔符前后一致
  • 年份支持1600年及以后的格式(两位或四位年份)

内容的提问来源于stack exchange,提问作者Ryan Dailey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:42:25