用于验证日期的正确正则表达式是什么。 2009-10-22或2009-01-01等平台PHP
答案 0 :(得分:7)
This(来自regexplib.com)将匹配您想要的内容,并执行闰年,每月每天等的检查。它对分隔符的容忍度比您想要的要强一些,但可以很容易修复。正如你所看到的,它相当可怕。
或者(最好在我看来)你可能只想检查正确位置的数字,然后在代码中执行闰年和每月日检查。有时一个正则表达式不是那么容易理解,并且明确地在代码中执行检查更清晰(因为您可以准确地报告错误 - “11月仅30天”,而不是“不匹配模式”消息,这是旁边无用)
答案 1 :(得分:3)
如果你想要一些简单的东西,而不仅仅是验证格式,但是没有尽可能多地验证输入月份或闰年的天数,你可以使用:
^(19|20)[0-9]{2}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$
此示例允许年份19xx和20xx
答案 2 :(得分:1)
因为你必须处理接受2009-02-28而不是2009-02-29,但接受2008-02-28你需要更多的逻辑,1认为正则表达式可以给。 (但如果有人能表现出来,我会留下深刻的印象)
我会尝试将其转换为日期并报告转换是否失败,或者您的语言是否有检查日期函数使用它。
答案 3 :(得分:1)
\d{4}-\d{2}-\d{2}
将匹配该表单中的字符串,但要检查日期是否有效,您必须将该字符串分解为年,月和日期(您可以使用此正则表达式)部分并检查每个他们。
您还可以确保年份必须以1或2开头:[12]\d{3}-\d{2}-\d{2}
,您也可以按月和日期执行相同操作:[12]\d{3}-[01]\d-[0123]\d
(但我会使用第一个正则表达式并“手动”比较部分
答案 4 :(得分:1)
发现这个在网上测试了几个日期,看起来很稳定,日期在1900到2000之间:
(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])
答案 5 :(得分:1)
好的,可以验证月和日范围的正则表达式
[0-9]{4}-(?:1[0-2]|[1-9])-(?:3[01]|[12][0-9]|[1-9])
如果您想限制年份,比如说,从1900年到2050年,您最终可以
(?:2050|20[0-4][0-9]|19[0-9]{2})-(?:1[0-2]|[1-9])-(?:3[01]|[12][0-9]|[1-9])
他们不会像2月31日那样捕捉到“微妙错误”的日期,所以很明显需要在正则表达式之外执行完整性检查。
答案 6 :(得分:0)
在.NET Regex中:
\d{4}\-\d{2}\-\d{2}
答案 7 :(得分:0)
[0-9]{4}-[0-9]{2}-[0-9]{2}
或
\d\d\d\d-\d\d-\d\d
或
...
只需阅读第一个正则表达式教程
答案 8 :(得分:0)
^\d{4}-\d{2}-\d{2}$
但没有正则表达式可以阻止某人输入“9867-39-56”
答案 9 :(得分:0)
对于完整的验证(包括验证日,月和年份部分是否有效),正则表达式不是首选工具。除了月份问题,你会遇到闰年的麻烦......
因此,如果您只想检查粗略格式是否正确,或者隔离不同的部分(年 - 月 - 日),那么正则表达式就可以了。
([0-9]{1,4})-(1[012]|0?[1-9])-([12][0-9]|3[01]|0?[1-9])
这已经非常精确,并将年份(0..9999),月份和日期捕获到捕获组中,准备好进行解析......
答案 10 :(得分:0)
如果您可以依赖的不仅仅是正则表达式,那么使用PHP提供的Posix函数date()和time()的混合解决方案可能如下所示:
<?php
date_default_timezone_set("GMT");
function validateDate($date)
{
if (preg_match("^[0-9]{4}-[0-9]{2}-[0-9]{2}^", $date))
{
return date('Y-m-d', strtotime($date)) === $date;
}
return false;
}
// Some tests
$dates = array(
'2009-09-09', '2009-09-32', '2009-31-00', '2035-01-02',
);
foreach($dates AS $date)
{
echo $date .': '. (validateDate($date) ? 'OK' : 'FAILS') ."\n";
}
?>
它不优雅加上你将受到Unix纪元时间的限制(从格林威治标准时间1970年1月1日00:00:00到格林尼治标准时间2038年1月19日03:14:07),但它是可靠的并且在PHP中得到很好的支持。 / p>