>  기사  >  백엔드 개발  >  여러 로케일로 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()는 숫자가 아닌 문자를 제거하고 소수 구분 기호를 분리합니다.
  • 구분자 수는 소수 구분자만 나올 때까지 한 번에 하나씩 제거하도록 결정됩니다. 남아 있습니다.
  • 그런 다음 문자열을 정리하여 천 단위 구분 기호를 제거하고 마지막으로 올바른 소수 구분 기호가 포함된 부동 소수점 값이 반환됩니다.

주의 사항

  • 소수점이 두 자리를 초과하면 이 방법은 실패합니다.
  • 거래하는 경우 이러한 시나리오에서는 보다 포괄적인 처리를 위해 통화 감지기(https://github.com/mcuadros/currency-Detector)와 같은 라이브러리를 사용하는 것을 고려해보세요.

위 내용은 여러 로케일로 PHP에서 통화 문자열을 구문 분석하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.