我有一个验证生日的正则表达式:
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
我对正则表达式有点帮助吗?
答案 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)