首页 >后端开发 >php教程 >如何从不同语言环境的字符串中准确解析货币值?

如何从不同语言环境的字符串中准确解析货币值?

DDD
DDD原创
2024-11-14 15:01:02695浏览

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
}

优点和注意事项

This解决方案提供了一种可靠的方法来从不同区域的货币字符串中提取浮动值。广泛的测试已经验证了其在各种场景下的准确性,包括以逗号或点作为小数分隔符和千位分隔符的值。

但是,需要注意的是,在处理超过两位数的小数部分时,它可能会失败。要解决此限制,请相应地修改代码中的正则表达式模式。

实际实现

解决方案部署在 https://github.com 的库中/mcuadros/currency-Detector,专门根据区域特定设置识别和处理货币值。

以上是如何从不同语言环境的字符串中准确解析货币值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn