我从dd-mm-yyyy或dd/mm/yyyy格式的文本区域获取日期(允许用户使用-或/)如何检查(使用regex或php)日期是否有效?到目前为止,是否有regex或php方法来验证此格式的日期?我试着在这里搜索,但什么也找不到。
发布于 2010-09-27 02:48:15
我想出了这个小函数,它会检查你是否使用DD(separator)MM(sameseparator)YYYY格式
以DD、MM和YYYY为整数。
function valid_date($input_date) {
if(!preg_match('/(?P<d>\d{2})(?P<sep>\D)(?P<m>\d{2})\2(?P<y>\d{4})/',$input_date, $aux_date))
return false;
$aux = mktime(0,0,0,$aux_date['m'],$aux_date['d'],$aux_date['y']);
return $input_date == date('d'.$aux_date['sep'].'m'.$aux_date['sep'].'Y',$aux);
}(按照下面的建议编辑)
发布于 2010-09-26 21:53:21
$date = str_replace("/", "-", $incoming);
$d = explode("-" , $date);重新组装零件,然后通过检查日期运行它
if( !checkdate($d[1], $d[0], $d[2]) )
echo 'Not a recognised date' ;http://www.php.net/manual/en/function.checkdate.php
发布于 2010-09-26 19:25:06
我强烈推荐使用PHP方法strtotime(),因为它不仅会检查格式是否有效,还会检查格式指定的时间是否正确(即永远不会有2月31日,但正则表达式可能无法捕捉到)。
您可以检查这是否对if (strtotime($toCheck)) {有效,因为如果不成功(http://us2.php.net/strtotime),它将返回FALSE。
EDIT:您需要先切换顺序,然后才能使用strtotime检查日期是否有效,如下所示:
$str = "07-31-1987";
$str = preg_replace('/([^-\/]+)[-\/]([^-\/]+)[-\/]([^-\/]+)/', '$2-$1-$3', $str);
echo date('r', strtotime($str)) . "\n"; // Fri, 31 Jul 1987 00:00:00 -0700https://stackoverflow.com/questions/3797529
复制相似问题