我試圖轉換下列數字,以便所有具有相同的值5460(如果在第三個最後位置或5460處沒有逗號或點) ,如果有逗號或點,則爲00。使用preg_replace將貨幣數字換成第三個最後位置的點數
這裏是我的測試號:
5460
5.460
5.460€
5460,00
5460,00€
5460.00
5460.00€
5.460,00
5.460,00€
5,460.00
5,460.00€
我用了preg_replace以下的正則表達式:
preg_replace('/[^0-9\,\-]+/','',$number);
的結果如下
5460 -> 5460
5.460 -> 5460
5.460€ -> 5460
5460,00 -> 5460,00
5460,00€ -> 5460,00
5460.00 -> 546000 // wrong
5460.00€ -> 546000 // wrong
5.460,00 -> 5460,00
5.460,00€ -> 5460,00
我不知道如何優化正則表達式,這樣錯誤的值也會被正確地替換爲:
5460.00 -> 546000 // wrong because should be 5460,00
5460.00€ -> 546000 // wrong because should be 5460,00
測試用例:
$numbers = array('5460', '5.460', '5.460€', '5460,00', '5460,00€', '5460.00', '5460.00€', '5.460,00', '5.460,00€');
foreach ($numbers as $number)
echo $number." -> ".preg_replace('/[^0-9\,\-]+/','',$number) . "\n";
所以我不知道如何檢查,如果最後兩個數字前有一個點,如果是用逗號來取代它。但只限於最後兩位數字。
感謝
但是...... 5460.00!= 546000!= 5460,00 – Daniel
我必須同意丹尼爾的困惑。你爲什麼試圖將'5460.00'轉換爲'5460,00'?這個人是否有5千歐元,或54.6萬歐元?當然,你希望逗號在*三位數之前出現?像'546,000'一樣? –
查看http://ideone.com/Juj0Hd –