2013-07-05 88 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; 
} 
相關問題