首頁  >  文章  >  後端開發  >  如何在 PHP 中解析具有多個語言環境的貨幣字串?

如何在 PHP 中解析具有多個語言環境的貨幣字串?

Barbara Streisand
Barbara Streisand原創
2024-11-13 03:13:02868瀏覽

How to Parse Currency Strings in PHP with Multiple Locales?

在PHP 解析貨幣字串

在PHP 解析貨幣字串時,依照目前區域設定處理不同的小數分隔符可能具有挑戰性。雖然使用 str_replace() 將逗號轉換為點在某些情況下可行,但它依賴於小數點分隔符號始終為點的假設。

更強大的解決方案

為了解決這個限制並迎合多種語言環境,一個更複雜但通用的解決方案是使用正則表達式(regex) 。操作方法如下:

public function getAmount($money)
{
    $cleanString = preg_replace('/([^0-9\.,])/i', '', $money);
    $onlyNumbersString = preg_replace('/([^0-9])/i', '', $money);

    $separatorsCountToBeErased = strlen($cleanString) - strlen($onlyNumbersString) - 1;

    $stringWithCommaOrDot = preg_replace('/([,\.])/', '', $cleanString, $separatorsCountToBeErased);
    $removedThousandSeparator = preg_replace('/(\.|,)(?=[0-9]{3,}$)/', '',  $stringWithCommaOrDot);

    return (float) str_replace(',', '.', $removedThousandSeparator);
}

說明

  • preg_replace() 刪除非數字字元並隔離小數點分隔符號。
  • 決定分隔符的數量,一次刪除一個分隔符,直到只剩下小數分隔符。
  • 然後清理字串以刪除千位分隔符,最後,具有正確小數分隔符的浮點值是返回。

注意事項

  • 如果小數部分超過兩位數,此方法將失敗。
  • 如果處理此類情況,請考慮使用像currency- detector (https://github.com/mcuadros/currency-Detector) 這樣的函式庫來進行更全面的處理。

以上是如何在 PHP 中解析具有多個語言環境的貨幣字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn