regex生日验证


regex birthday validation

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

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';
}

即:

正确月份

闰年日期不准确

二月接受第30天&31

且第20年接受的大于2013年

我只做了几个月的正确生日验证,如何才能做得更准确?或者有其他方法可以验证生日?

我想要的输出是:

在二月验证闰年日期

年份不得大于2010年

输出:

02/14/2010

我只是对regex很陌生,能帮忙吗?

正则表达式不太适合解析日期。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)

演示