Java 正则表达式正在验证 ddMMMyyy 中的日期,但未验证 yyyy-MM-dd [closed]

Java regular expression is validating the date in ddMMMyyy but not validating yyyy-MM-dd [closed]

提问人:dilipyadav 提问时间:6/16/2022 最后编辑:Anonymousdilipyadav 更新时间:6/17/2022 访问量:74

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

去年关闭。

我想验证不同格式的不同类型的字符串,如 、 、 、 等。我已经为此编写了正则表达式,它工作正常,但我还需要验证一个字符串,但表达式失败了。10JUN20222Mx1D4M1DTENONE|TEN'''^([0-9A-WYZa-wyz ]+)([xX|]([0-9A-WYZa-wyz ]+))?$'''2022-06-10

Java 日期 匹配

评论

1赞 Matteo NNZ 6/17/2022
正则表达式可以帮助你处理正则表达式,但是当表达式变得非常多并且彼此之间非常不同时(就像你在这里看到的一样),很快就会变得难以遵循你的正则表达式。我宁愿建议你持有一个 s 集合,每个 s 都有不同的日期模式,并在验证日期时循环浏览它。它可能效率较低,但它绝对更灵活,尤其是更容易理解。SimpleDateFormatter
1赞 Basil Bourque 6/17/2022
顺便说一句,ISO 8601 标准定义了合理、明确的日期时间格式。我建议教育您的数据发布者采用 ISO 8601 来取代这种大杂烩的格式。例如,两个月零一天的跨度将是 .今年6月10日是.P2M1DT2022-06-10
2赞 Basil Bourque 6/17/2022
@MatteoNNZ 很好的建议,除了该类在几年前被现代 java.time 类所取代,特别是 .SimpleDateFormatDateTimeFormatter
1赞 Anonymous 6/17/2022
我还建议根据这些字符串的含义进行验证,因为它将帮助代码的读者理解。我需要 2 个月 1 天?什么?与日期和时间无关?什么?2Mx1DTENONE|TEN
1赞 Matteo NNZ 6/17/2022
@BasilBourque你是对的,我总是将新的和旧的混淆(直到我导入它并意识到它是我想导入的另一个)

答:

1赞 Ryan 6/17/2022 #1

说到正则表达式,不要试图变得过于聪明。只需解决基本问题。如果这需要多个正则表达式模式,那就这样吧。它更容易维护和阅读。

我会将其用于第一个正则表达式:并将其用于第二个正则表达式:或者如果您必须将它们组合在一起:[0-3]?\d\w{3}(1|2)\d{3}(1|2)\d{3}(-\d{2}){2}([0-3]?\d\w{3}(1|2)\d{3})|((1|2)\d{3}(-\d{2}){2})