繁体   English   中英

正则表达式中的可选字符

[英]optional character in Regular Expression

我找到了这个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

同样也有效,因此我正在寻找一种修改方式,以便在月份和日期块中将零可选作为第一个字符。 你能帮我一些忙吗?

如果要有一个可选的零,可以使用此RegEx(您自己的编辑版本):

^[0-9]{4}-((?:0)?[1-9]|1[0-2])-((?:0)?[1-9]|[1-2][0-9]|3[0-1])$

要使RegEx中的字符(或范围)为可选,请将其放在圆括号中,后跟问号:

[az]是强制性的

([az])? 是可选的,带有捕获组

(?:[az])? 没有捕获组,只是可选的

阅读有关RegEx中捕获组的更多信息

您可以这样使用: ^[0-9]{4}-(([1-9])|(0[1-9]|1[0-2]))-(([1-9])|(0[1-9]|[1-2][0-9]|3[0-1]))$

这里有一个例子。

使用您当前的正则表达式只需将0设为0?

^[0-9]{4}-(0?[1-9]|1[0-2])-(0?[1-9]|[1-2][0-9]|3[0-1])$

DEMO

PHP已经有一个提取日期的结构。 如果您使用正则表达式提取日期,则“现在有两个问题”

PHP的DateTime::createFromFormat :“返回根据指定格式格式化的新DateTime对象”

您可以使用dj选项接受1或2位数字的天,使用mn选项接受1或2位数字的月。

您要使用的格式为: "Ymd"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM