正则表达式生日验证

时间:2013-11-17 06:12:46

标签: 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年

我几个月才做得正确,我怎样才能做更准确的生日验证?还是有其他方法来验证生日?

我想要的输出是:

验证2月份的闰年日期

年份不得超过2010年

输出:

02/14/2010

我对正则表达式有点帮助吗?

1 个答案:

答案 0 :(得分:5)

正则表达式不适合解析日期。 PHP已经有内置函数和类来执行此操作,您应该使用它。以下是使用PHP的DateTime类(来自Glavićphp.net函数)来完成此操作的方法:

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)

Demo!