我发现了这个REGEXP:
^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$
以这种格式验证日期非常有用:
yyyy-mm-dd
与" - "作为分隔符。除了我想做到这一点之外,它对我来说是完美的:
1970-1-1
也有效,所以我正在寻找修改,将月份和日期块中的零可选作为第一个字符。你能帮我一下吗?
答案 0 :(得分:2)
如果您想要一个可选的零,您可以使用此RegEx(您自己的编辑版本):
^[0-9]{4}-((?:0)?[1-9]|1[0-2])-((?:0)?[1-9]|[1-2][0-9]|3[0-1])$
要使RegEx中的字符(或范围)成为可选项,请将其放在括号后面加上问号:
[a-z]
是强制性的
([a-z])?
是可选的,带有捕获组
(?:[a-z])?
没有捕获组,只是可选的
Read more关于RegEx中的捕获组
答案 1 :(得分:1)
您可以使用类似的内容:^[0-9]{4}-(([1-9])|(0[1-9]|1[0-2]))-(([1-9])|(0[1-9]|[1-2][0-9]|3[0-1]))$
。
有一个例子here。
答案 2 :(得分:1)
答案 3 :(得分:0)
PHP已经有一个提取日期的构造;如果您使用正则表达式来提取日期,请"Now you have two problems"
PHP的DateTime::createFromFormat
:“返回根据指定格式”
您可以使用d
或j
选项接受1或2位数天,m
或n
选项接受1或2位数月份。
您要使用的格式为:"Y-m-d"