2015-10-14 14 views
0

我想從「字符串2015-08-20」只提取日期部分。preg_replace  變成數字

$original = "string 2015-08-20"; 

// Trying to remove all but numbers and dashes 
$date = preg_replace("#[^0-9-]#iu", '', $original); 
// Expecting "2015-08-20" 
echo $date; 
// But ends up with "1602015-08-20" 

爲什麼我會在我的字符串前得到「160」?

+0

'$ date = preg_replace(「#^。*?;#」,'',$ original);' –

+0

[** norepro **](https://3v4l.org/FILIUe) – Rizier123

回答

1

你應該反過來這樣做。搜索日期字符串,而不是嘗試刪除不是日期字符串的所有內容。

這將使代碼更能抵抗意外(比如$original中的數字不是日期字符串的一部分)。

$original = "string 2015-08-20"; 
preg_match('#\d{4}-\d{2}-\d{2}#', $original, $matches); 

# string(10) "2015-08-20" 
var_dump($matches[0]); 
0

你得到160可能是因爲你正在處理非換空間,在 格式,但在 格式不表達的字符串。考慮到用你的正則表達式替換字符串string 2015-08-20中所有不是數字或超級的字符,它會保留160,所以結果是1602015-08-20
這是種系發生在他的回答中描述和解決的確切情況。

這裏有一個更簡潔的解決方案:

$original = "string 2015-08-20"; 
$date = preg_replace("#^.*(\d{4}-\d{2}-\d{2})$#", "$1", $original); 

它取代了串同組的唯一內容,這正是日期部分。