我是新的正则表达式,需要一个只接受(和验证日期) dd-mm-yyyy格式,带前导零的单数日或月,只有连字符。我已经能够修改由Ofir的响应here给出的代码,使其只允许连字符,但不能完全实现主导零部分。还搜索了许多regex库,但大多数解决方案要么不验证日期,要么允许dd和mm部件中的个位数。这里是大梁:
^(?:(?:31(-)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(-)(?:0?[13-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{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})$
它接受dd - mm,d-mm和dd,dd,date,dd,date,d-mm,dd,dd,dd,dd,dd
我能够理解,以前的标记的量词需要改变,但我无法弄清楚如何改变。
发布于 2022-03-07 08:02:41
这里有一个建议,接受从00到31天,从00-12月份,从0000-2999年,坚持2,2和4位数。
^([0-2][0-9]|3[01])-(0[0-9]|1[0-2])-[0-2][0-9]{3}$
这不会在少于31天的几个月内进行检查。您最好使用您正在使用的任何语言的内置日期函数,其中将能够检查这一点。
修改以包括来自AmigoJack的改进。在没有更改匹配的情况下,正则表达式字符串中的7个字符减少。
谢谢AmigoJack
发布于 2022-03-07 15:03:13
以下模式将匹配"01-01-0000“和"31-12-9999”之间的字符串。
^(?:0[1-9]|[12][0-9]|3[01])-(?:0[1-9]|1[012])-[0-9]{4}$
但是,字符串仍然需要在编程语言中进行验证。
因为这个模式不关心一个月有多少天。
考虑到闰年,一个甚至可以解释2月份的模式将过于复杂。
^(?:0[1-9]|1[0-9]|2[0-8])-(?:0[1-9]|1[0-2])-[0-9]{4}$|^(?:(?:31-(?:0[13578]|1[02]))-|(?:(?:29|30)-(?:0[13-9]|1[0-2])-))(?:(?:1[6-9]|[2-9][0-9])[0-9]{2})$|^(?:29-02-(?:(?:(?:1[6-9]|[2-9][0-9])(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$
https://stackoverflow.com/questions/71286750
复制相似问题