使用preg_match查找日期是否包含有效格式


find if the date containd a valid format using a preg_match

我有一个文本输入框,因此用户可以按以下格式输入日期(我不想使用3个单独的输入框来表示月份、日期和年份):

mm/dd/yyyy (could be a single digit m/d/yyyy)

mm-dd-yyyy (single digit m-d-yyyy)

然后我想使用preg_match来检查用户是否按照上面的格式输入了一个值。如果是,我将提取月份、日期和年份(使用substr),并使用php函数checkdate()检查有效日期,知道什么时候是闰年,并防止出现9月31日等错误…

希望我没有错过任何东西。。。

现在,我一直在想如何使用preg_match来检查用户是否按照上面指示的格式输入了有效日期

这就是我想到的???

preg_match(d{2})('d{2})('d{4})

提取月份、日期和年份(对我来说还可以):

$date = trim($_POST['date']);
$month = substr($date, 0, 2);
$day = substr($date, 3, 2);
$year = substr($date, 6, 4);

最后,检查日期是否有效(对我来说还可以):

checkdate($month, $day, $year);

感谢

您可以使用这样的东西:

if (preg_match("#^('d{1,2})'D('d{1,2})'D('d{2,4})$", trim($date), $match)
        and checkdate($match[2], $match[1], $match[3])) {
    $timestamp = mktime(0, 0, 0, $match[2], $match[1], $match[3]);
    echo "Date is valid";
} else
    echo "Invalid date";

我在这里看到的唯一问题是,如果用户输入类似于2012年1月6日的内容,期望您的系统猜测2012年,届时checkdate会想到12年。您不能只在字符串的开头添加"20",因为另一个用户可能会输入类似15.11.99的内容,期望得到1999年的猜测。这可以通过使用基于javascript的日历的只读字段来解决,该字段将强制使用正确的日期格式,然后您可以在不使用regexp的情况下简单地使用explode("-", $date)