2

尝试验证一个字符串以检查它是否具有 07.05.2013 格式,但不知道如何处理它。

考虑检查是否“。” 是第 3 个和第 6 个字符,然后检查其余字符是否为数字,但我不知道如何实现。

4

6 回答 6

4

如果只需要解析日期,可以使用php的日期时间特性。

<?php
$date = DateTime::createFromFormat('d.m.Y', '07.05.2013');
echo $date->format('Y-m-d');
?>
于 2013-07-05T15:43:21.803 回答
3

使用DateTime::CreateFromFormat()方法。这将验证您的输入并同时创建一个日期对象(然后您可以使用它来处理日期)。

$dateObj = DateTime::CreateFromFormat('d.m.Y', $inputString);

如果日期无效或格式错误,$dateObj将为false.

如果它是所需格式的有效日期,$dateObj则将是一个DateTime对象。

希望有帮助。

于 2013-07-05T15:44:32.443 回答
2
if (preg_match('/^\d{2}\.\d{2}\.\d\{4}$/', $yourstring)) {
 ...
}

如果您的字符串与 dd.dd.dddd 之类的表达式匹配,其中 d 是数字,这将是正确的。

于 2013-07-05T15:43:00.417 回答
2

您还可以使用checkdate功能:

$date= '07.05.2013';
$date_arr= explode('.', $date);
if (checkdate($date_arr[0], $date_arr[1], $date_arr[2])) {
    // validate your date here
}
于 2013-07-05T15:44:10.253 回答
1

就像是:

$date = DateTime::createFromFormat('d.m.Y', $yourStringWhichMightBeADate);
if ($date)
{
    // it's a date, so use it
}

或者:

$date = DateTime::createFromFormat('m.d.Y', $yourStringWhichMightBeADate);
if ($date)
{
    // it's a date, so use it
}

如果月份是第一个而不是月份中的某一天。

于 2013-07-05T15:45:48.183 回答
1

解决方案 1:

这是我这样做的方式,它适用于您决定输入的每个输入(例如:“12.02.1996”、“12.30.1996”、“dasdsadas”等等......)

public function valid_date($inputdate){
  $date = $inputdate;
  if (strtotime($date)){
     if (strpos($date,'.') !== false) {
       list($day, $month, $year) = explode('/', $date);
       return checkdate($month, $day, $year);
     }else{
        return false;
     }
  }else{
    return false;
  }
}

如果输入日期是 10/10/1996(也是有效格式)或 10/02/1996,它不会接受它们,因为我要求用户使用带有“.”的格式。如果您不想进行此验证,只需删除“如果”即可。

解决方案 2:

在php.net找到这个,非常干净有趣!

    public function valid_date($date, $format = 'd.m.Y'){
        $d = DateTime::createFromFormat($format, $date);
        return $d && $d->format($format) == $date;
}
于 2014-02-05T16:44:35.740 回答