我有一个验证生日的正则表达式:
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)
演示