ホームページ > バックエンド開発 > PHPチュートリアル > さまざまなロケールの文字列から金額を正確に解析するにはどうすればよいですか?

さまざまなロケールの文字列から金額を正確に解析するにはどうすればよいですか?

DDD
リリース: 2024-11-14 15:01:02
オリジナル
708 人が閲覧しました

How to Accurately Parse Monetary Values from Strings in Various Locales?

さまざまなロケールで通貨値を正確にフォーマット解除する

通貨値を処理するには、多くの場合、金額を表す文字列を数値に変換する必要があります。 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
}
ログイン後にコピー

利点と注意点

これこのソリューションは、さまざまなロケールの通貨文字列から浮動小数点値を抽出する信頼性の高い方法を提供します。広範なテストにより、小数点の区切り文字としてカンマやドットを使用した値や千の位の区切り文字を含む、幅広いシナリオでの精度が検証されています。

ただし、2 桁を超える小数部分を処理する場合は失敗する可能性があることに注意してください。この制限に対処するには、コード内の正規表現パターンを適宜変更します。

実際の実装

ソリューションは、https://github.com のライブラリ内にデプロイされます。 /mcuadros/currency-detector。ロケール固有の設定に基づいて通貨値の識別と処理を専門とします。

以上がさまざまなロケールの文字列から金額を正確に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート