PHP での金額の正確な解析
さまざまな形式の財務データを解析することは、特にロケール固有の区切り文字を考慮する場合に困難になることがあります。この問題は、「75,25 €」などのお金の文字列表現を浮動小数点値に変換しようとすると発生します。
一般的なアプローチでは、カンマをドットに置き換えた後に parsefloat() を使用します。小数点区切り文字としてカンマを使用するロケールを扱う場合は不十分です。この制限に対処するには、より包括的なソリューションが必要です。
ローカリゼーションを意識したソリューション
提案されたソリューションは、正規表現に依存してローカリゼーション認識のニーズに対処します。入力文字列から数値を抽出します。コンマとドットの両方を小数点の区切り文字として効果的に処理し、ロケールに関係なく正しい表現を維持します。
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); }
ソリューションのテスト
その有効性を検証するには、ソリューションは、次のようなさまざまな入力形式でテストされました。
['1,10 USD', 1.10], ['1 000 000.00', 1000000.0], [' 000 000.21', 1000000.21], ['£1.10', 1.10], ['3 456 789', 123456789.0], ['3,456,789.12', 123456789.12], ['3 456 789,12', 123456789.12], ['1.10', 1.1], [',,,,.10', .1], ['1.000', 1000.0], ['1,000', 1000.0]
結果は、入力形式に関係なく、浮動小数点値を正確に抽出するソリューションの機能を示しています。
制限事項とSource
このソリューションはさまざまなロケールの処理に優れていますが、2 桁を超える小数に関しては制限があります。コードベースは https://github.com/mcuadros/currency-detector で入手でき、さまざまなロケールで通貨値を解析するための実用的な実装を提供します。
以上がPHP で金額を正確に解析する方法: ローカリゼーションを意識したアプローチ?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。