php 时间正则式的表示

2009-11-10这种格式的正则表达式不懂正则表达式高手帮忙[0-9]{4}-[0-9]{2}-[0-9]{2}这个通不过if(!(preg_match($pstime... 2009-11-10
这种格式的正则表达式
不懂正则表达式
高手帮忙
[0-9]{4}-[0-9]{2}-[0-9]{2} 这个通不过

if(!(preg_match($pstime, "/^\d{4,}\-\d{1,2}\-\d{1,2}$/i"))){
echo "时间格式不正确!";
}

这个也不行!!!!

为什么没有一个能用的??????

我只要一个最简单!!判断一下格式而已
展开
 我来答
wuchangqian
推荐于2016-04-27 · TA获得超过1317个赞
知道小有建树答主
回答量:913
采纳率:0%
帮助的人:799万
展开全部
最简单的正则 如 : \d{4}-\d{2}-\d{2}
但是实际情况却不是那么简单,,要考虑,有效性和闰年等问题.....

对于日期的有效范围,不同的应用场景会有所不同。MSDN中定义的DateTime对象的有效范围是:0001-01-01 00:00:00到9999-12-31 23:59:59。

UNIX时间戳的0按照ISO 8601规范为 :1970-01-01T00:00:00Z。

先考虑与年份无关的前三条规则,年份可统一写作

(?!0000)[0-9]{4}

下面仅考虑月和日的正则

1. 包括平年在内的所有年份的月份都包含1-28日

(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])

2. 包括平年在内的所有年份除2月外都包含29和30日

(0[13-9]|1[0-2])-(29|30)

3. 包括平年在内的所有年份1、3、5、7、8、10、12月都包含31日

(0[13578]|1[02])-31)

合起来就是除闰年的2月29日外的其它所有日期

(?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)

接下来考虑闰年的实现

1 : 四年一闰
([0-9]{2}(0[48]|[2468][048]|[13579][26])

2 : 百年不闰,四百年再闰
(0[48]|[2468][048]|[13579][26])00

3 : 合起来就是所有闰年的2月29日
([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29)

四条规则都已实现,且互相间没有影响,合起来就是所有符合DateTime范围的日期的正则

^((?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)|([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29)$

考虑到这个正则表达式仅仅是用作验证,所以捕获组没有意义,只会占用资源,影响匹配效率,所以可以使用非捕获组来进行优化。

^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$
addgrrr
2009-11-12 · TA获得超过418个赞
知道小有建树答主
回答量:213
采纳率:0%
帮助的人:275万
展开全部
/^\d{4,}\-\d{1,2}\-\d{1,2}$/i

大哥,你preg_match函数的用法写错了哈。
正确的参数格式是:preg_match(string pattern, string subject)
preg_match("/^\d{4,}\-\d{1,2}\-\d{1,2}$/i", $pstime);
这个是可以通过的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
newchinays
2009-11-10 · TA获得超过1173个赞
知道小有建树答主
回答量:1238
采纳率:48%
帮助的人:427万
展开全部
[0-9]{4}-[0-9]{2}-[0-9]{2}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jinlio
2009-11-10 · TA获得超过1459个赞
知道大有可为答主
回答量:1719
采纳率:0%
帮助的人:1530万
展开全部
/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/
记得加引号
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式