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

Scala中匹配mm/dd/yyyy与mmddyyyy日期格式的通用正则写法

Scala环境下兼容两种日期格式的正则实现方案

核心调整逻辑非常简单:你原有针对mm/dd/yyyy格式编写的正则本身已经包含了完整的闰年判断、大小月日期合法性校验,不需要改动核心日期匹配规则,只需要把正则里固定匹配斜杠的\/替换为\/?即可——?代表匹配前一个字符0次或1次,刚好覆盖「有斜杠分隔」和「无斜杠纯数字」两种场景,Scala基于JDK的正则引擎完全支持该语法。

调整完成的通用正则

^02\/?(?:[01]\d|2\d)\/?(?:19|20)(?:0[048]|[13579][26]|[2468][048])|(?:0[13578]|10|12)\/?(?:[0-2]\d|3[01])\/?(?:19|20)\d{2}|(?:0[469]|11)\/?(?:[0-2]\d|30)\/?(?:19|20)\d{2}|02\/?(?:[0-1]\d|2[0-8])\/?(?:19|20)\d{2}$

Scala环境使用注意

Scala中字符串默认会把反斜杠作为转义字符,定义正则时推荐用三引号包裹原生字符串,避免重复写转义符,参考使用示例:

// 定义正则实例
val datePattern = """^02\/?(?:[01]\d|2\d)\/?(?:19|20)(?:0[048]|[13579][26]|[2468][048])|(?:0[13578]|10|12)\/?(?:[0-2]\d|3[01])\/?(?:19|20)\d{2}|(?:0[469]|11)\/?(?:[0-2]\d|30)\/?(?:19|20)\d{2}|02\/?(?:[0-1]\d|2[0-8])\/?(?:19|20)\d{2}$""".r

// 匹配校验示例
val testSet = Seq("02/29/2020", "02292020", "12/31/1999", "12311999", "04302024", "02/28/2023")
testSet.foreach(item => println(s"$item 匹配结果:${datePattern.matches(item)}"))

匹配规则说明

  • 完全兼容你原有的mm/dd/yyyy格式匹配能力,不会出现合法日期漏匹配的问题
  • 新增支持无分隔符的mmddyyyy8位数字日期,同样继承原正则的合法性校验逻辑,会自动拦截02302024、13322020这类非法日期
  • 仅允许斜杠作为分隔符,不会误匹配横杠、点号等其他分隔的日期格式,符合你的字段格式要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:45:31