2013-07-05 68 views
2

试图验证一个字符串来检查它是否具有格式07.05.2013,不知道如何处理它。检查一个字符串是否有07.05.2013日期格式

想着检查'。'是第3和第6个字符,然后检查其余的字符是否是数字,但我不知道如何实现这一点。

+1

想验证字符还是要验证日期? – HamZa

+0

将' - '更改为'。'在正则表达式http://stackoverflow.com/questions/5032313/php-regex-date-validation – stark

+3

是格式mm.dd.yyyy或dd.mm.yyyy? – DaGardner

回答

4

如果您只需要解析日期,则可以使用php的日期时间功能。

<?php 
$date = DateTime::createFromFormat('d.m.Y', '07.05.2013'); 
echo $date->format('Y-m-d'); 
?> 
2
if (preg_match('/^\d{2}\.\d{2}\.\d\{4}$/', $yourstring)) { 
... 
} 

如果您的字符串与dd.dd.dddd这样的表达式匹配,那么这将成立,其中d是数字。

+0

您忘记了'^'和'$'匹配从开始到结束 – hek2mgl

+0

是的,我做到了。谢谢 –

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 
} 
+0

我会添加另一个检查,'if(count($ date_arr)== 3)'。这将防止一些讨厌的未定义的偏移错误... – HamZa

3

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

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

如果日期是无效的或格式错误,$dateObjfalse

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

希望有所帮助。

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 
} 

要是下个月是第一个,而不是一个月的日子。

1

解决方案1:

下面是我做的方式,它的工作原理与每一个你决定进入(例如,输入:“1996年2月12日”,“1996年12月30日”,“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; 
    } 
} 

如果输入的日期为1996年10月10日,这也是一个有效的格式,或1996年10月2日,它不会接受他们,因为我要求的用户使用格式为“。”。只要删除“如果”你不想做这个验证,就是这样。

解决方案2:

php.net,非常干净和有趣的发现这个!

public function valid_date($date, $format = 'd.m.Y'){ 
     $d = DateTime::createFromFormat($format, $date); 
     return $d && $d->format($format) == $date; 
} 
相关问题