2015-06-01 75 views
1

我試圖使用preg_replace()從PHP中的字符串中刪除所有日期。日期是以下格式:YYYY-MM-DD,YYYY/MM/DD或YYYY.MM.DD從PHP中的字符串中刪除日期

$string1 = "Current from 2014-10-10 to 2015-05-23";  
$output = preg_replace('/\d{4}[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])/g', '', $string1);  

預期輸出爲 「從到當前」。目前我正在回來「」。

任何幫助非常感謝! Wonko

+0

你有錯誤報告嗎?應該會得到'未知修飾符'g'' – chris85

+0

好,我在日誌中發現了這個:PHP警告:preg_replace():未知修飾符'g' –

回答

2

這應該工作。

$input = "Current from 2014-10-10 to 2015/05/23 and 2001.02.10"; 
$output = preg_replace('/(\d{4}[\.\/\-][01]\d[\.\/\-][0-3]\d)/', '', $input); 
echo $output; 

更新 要確保日期也有效

<?php 
$input = "Current from 2014-10-10 to 2015/05/23 and 2001.19.10"; 
$output = preg_replace_callback('/(\d{4}[\.\/\-][01]\d[\.\/\-][0-3]\d)/', function($matches) { 
    $date = str_replace(array('.','/'), '-', $matches[1]); 
    $newDate = DateTime::createFromFormat('Y-m-d', $date); 
    if($newDate->format('Y-m-d') == $date) { 
     return false; 
    }else { 
     return $matches[1]; 
    } 
}, $input); 
echo $output; 
+0

我認爲這是因爲OP在正則表達式中沒有匹配。是的,增加19個月和39天將是一個誤報。這可以很容易地通過使用'preg_replace_callback'來檢查日期是否有效,但是在這種情況下我不需要它。 – Karl

+0

我確實需要小心,不要刪除無效的日期,或者至少儘可能! –

+0

我將進行更新 – Karl