我有这个正则表达式(\d{4})-(\d{2})-(\d{2})
来检测有效日期,但是,它并不完美,因为一些传入数据是2009-24-09(YYYY-DD-MM),有些是2009-09- 24(YYYY-MM-DD)。
是否可以使用单行正则表达式来检测第二个&第三部分大于12,以更好地验证日期?
答案 0 :(得分:7)
如果你不知道格式,你会得到不明确的结果。
{p> 1 {1>}是1月4日还是3月1日?您无法使用正则表达式进行验证。
正如Albert所说,尝试解析日期,并确保用户知道要使用的格式。您可能会尝试将月份和年份分成不同的字段或组合框。
答案 1 :(得分:2)
正则表达式对日期验证不是很好,我认为最好尝试解析日期,并且可以在解析之前将正则表达式作为完整性检查。
但是如果您仍然需要它,您可以使用以下正则表达式(\d{4})-(\d{2})-((1[012])|(0\d)|\d)
修复月份部分,但在此之后它会走下坡路,因为您需要检查月份和闰年的正确日期。
答案 2 :(得分:0)
验证YYYY-MM-DD或YYYY-DD-MM:
$ptn = '/(\d{4})-(?:(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-2])|(0[1-9]|' .
'[1-2][0-9]|3[0-2])-(0[1-9]|1[0-2]))/';
echo preg_match_all($ptn, '2009-24-09 2009-09-24 dd', $m); // returns 2
即便如此,日期可能无效,例如:2010-02-29
,以处理checkdate()
:
checkdate(2, 29, 2010); // returns false
答案 3 :(得分:0)
(\d{4})-((0[1-9]|1[0-2])-(\d{2}))|((\d{2})-(0[1-9]|1[0-2]))
YYYY-(MM-DD)|(DD-MM)