首页  >  文章  >  后端开发  >  如何在 PHP 中解析具有多个语言环境的货币字符串?

如何在 PHP 中解析具有多个语言环境的货币字符串?

Barbara Streisand
Barbara Streisand原创
2024-11-13 03:13:02897浏览

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