在各種語言環境中準確取消貨幣值的格式
處理貨幣值通常需要將表示貨幣金額的字串轉換為數字數量。在 PHP 中,可以利用 parsefloat() 函數來實現此目的。但是,在處理可能因區域設定而異的值時,小數點分隔符號可能會有所不同。這對簡單的 parsefloat(str_replace(',', '.', $var)) 方法提出了挑戰。
全面的解決方案
解決此區域設定- 相關問題,請考慮以下解決方案,該解決方案可以有效地提取浮點值,同時考慮不同的小數分隔符號和千位分隔符號:
public function getAmount($money) { $cleanString = preg_replace('/([^0-9\.,])/i', '', $money); // Remove non-numeric characters $onlyNumbersString = preg_replace('/([^0-9])/i', '', $money); // Extract only numbers $separatorsCountToBeErased = strlen($cleanString) - strlen($onlyNumbersString) - 1; // Determine extra separators $stringWithCommaOrDot = preg_replace('/([,\.])/i', '', $cleanString, $separatorsCountToBeErased); // Replace separators $removedThousandSeparator = preg_replace('/(\.|,)(?=[0-9]{3,}$)/i', '', $stringWithCommaOrDot); // Remove excess thousand separators return (float) str_replace(',', '.', $removedThousandSeparator); // Convert to float with dot as decimal separator }
優點和注意事項
This解決方案提供了一種可靠的方法來從不同區域的貨幣字串中提取浮動值。廣泛的測試已經驗證了其在各種場景下的準確性,包括以逗號或點作為小數分隔符號和千位分隔符號的值。
但是,需要注意的是,在處理超過兩位數的小數部分時,它可能會失敗。若要解決此限制,請相應地修改程式碼中的正規表示式模式。
實際實現
解決方案部署在https://github.com 的庫中/mcuadros/currency-Detector,專門根據區域特定設定識別和處理貨幣值。
以上是如何從不同語言環境的字串中準確解析貨幣值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!