Php 正则表达式生日验证

Php 正则表达式生日验证,php,regex,validation,date,Php,Regex,Validation,Date,我有一个用于验证生日的正则表达式: if(!preg_match('/^(0?[1-9]|1[012])[- .\/](0?[1-9]|[12][0-9]|3[01])[- .\/](19|20)?[0-9]{2}$/', $_POST['bday']) { echo 'enter your birthdate in a valid format. mm/dd/yyy'; } 即: 正确月份 闰年日期不准确 2月30日和31日 第20年比2013年更大 我只做了几个月的正确的生日验证,

我有一个用于验证生日的正则表达式:

if(!preg_match('/^(0?[1-9]|1[012])[- .\/](0?[1-9]|[12][0-9]|3[01])[- .\/](19|20)?[0-9]{2}$/', $_POST['bday'])
{
    echo 'enter your birthdate in a valid format. mm/dd/yyy';
}
即:

正确月份

闰年日期不准确

2月30日和31日

第20年比2013年更大

我只做了几个月的正确的生日验证,我怎么能做得更准确呢?或者有其他方法来验证生日

我期望的输出是:

在2月份验证闰年日期

年份不得大于2010年

输出:

2010年2月14日


我只是对正则表达式不太熟悉,请帮忙?

正则表达式不适合解析日期。PHP已经有了内置的函数和类来实现这一点,您应该改用它。下面是如何使用PHP的类(function by,from)实现这一点:


正则表达式不适合解析日期。PHP已经有了内置的函数和类来实现这一点,您应该改用它。下面是如何使用PHP的类(function by,from)实现这一点:


不要为此使用正则表达式。正则表达式用于模式匹配,而不是像日期验证那样复杂。假设你为你想要的东西想出了一个表达式,它将是难以置信的复杂和低效。只需查看PHP日期/时间函数,不要使用正则表达式。正则表达式用于模式匹配,而不是像日期验证那样复杂。假设你为你想要的东西想出了一个表达式,它将是难以置信的复杂和低效。只要看看PHP的日期/时间函数。如果年份不应该大于现在怎么办?@Halfacht Change
$d->format('Y')format('Y')如果年份不应该大于现在怎么办?@Halfacht Change
$d->format('Y')format('Y'))
function validateDate($date, $format = 'm/d/Y')
{
    $d = DateTime::createFromFormat($format, $date);
    return $d && $d->format($format) == $date && $d->format('Y') <= 2010;
}
var_dump(validateDate('02/14/2010')); // bool(true)
var_dump(validateDate('02/14/2011')); // bool(false)