2010-06-09 3 views
3

에서 통화 및 금액을 분할하는 것은문자열

£12.10 
$26.13 
€12.50 

내가 가져 단일 통화로이를 변환해야합니다 서명합니다. 다음과 같이 내가 문자열을 분할하고

$parts = split(' ', preg_replace("/([0-9])/", ' ${1}', $amount, 1)); 

PREG_SPLIT_DELIM_CAPTURE와 preg_split 작업을 할 수 없습니다

$parts = preg_split("/\d/", $amount, 2, PREG_SPLIT_DELIM_CAPTURE); 

나는 필요

$currencySymbols = array('£'=>'GBP', '$'=>'USD','€'=>'EUR') 

통화 코드 통화 기호의 배열을 가지고 1. 문자열을 통화 기호와 값으로 나눕니다. 더 좋은 방법이 있다면, 내가하는 일을 2. 통화 기호를 다음으로 매핑하십시오. 통화 코드. $ currencySymbols와 매핑 할 수 없습니다. [$ parts [0]]

도움이 되겠습니다. (PHP 5.2.6)를 사용하여 캐릭터 세트 = UTF-8

많은 감사

답변

5
+0

NumberFormatter는 PHP 5.2.6에서 사용할 수 없습니다. – NineBerry

+0

@NineBerry : 잘 부탁드립니다. 5.3에 대한 설명서를 보지 못했습니다. 바하마! – R0MANARMY

3

당신은 분할을 사용하지 말아야하지만, 패턴이 양과 사용하는 통화를 식별하기 위해 일치. 일부 로캘에서는 통화 기호가 금액 앞에 표시되기 때문에 다른 기호에서는 금액 뒤에 표시됩니다. 또한 일부 로캘에서는 기호와 금액이 공백으로 구분됩니다.

다음과 같은 기능을 사용할 수 있습니다

function findAmountAndCurrency($s, &$amount, &$currency){ 
    $re_amount="/[0-9\.]+/"; 
    $re_curr="/[£\$€]+/"; 

    preg_match($re_amount, $s, $matches); 
    $amount = floatval($matches[0]); 

    preg_match($re_curr, $s, $matches); 
    $currency = $matches[0]; 
    } 

이이 사용될 것입니다 방법은 다음과 같습니다 당신이 UTF-8 입력이있는 경우

function handle($s){ 
    $currencySymbols = array('£'=>'GBP', '$'=>'USD','€'=>'EUR'); 

    findAmountAndCurrency($s, $amount, $currency); 
    echo("Amount: " . $amount . "<br/>"); 
    echo("Currency: " . $currency . "<br/>"); 
    echo("Identified Currency: " . $currencySymbols[$currency] . "<br/>"); 
    } 

    handle("£12.10"); 
    handle("3.212 €"); 
    handle("$ 99.99"); 

당신은 유로 기호에 문제가 얻을 수 있습니다. 지금 거기에서 해결책을 확인할 수 없습니다. 누군가 다른 사람을 도울 수 있습니다.

+0

응답하지 않으셔서 죄송합니다. 나는 어떤 반응을 알리기 위해 이메일을받을 것이라고 생각했다. 그래서 너희들이 거의 즉시 대답했지만 나는 오늘 만 알게되었다. 로케일 처리 패턴 매칭에 동의합니다. 내가 주요 문제는 "Â £ 30.30" 아래와 같이 데이터 자체가 실현 나는 그것을 작업 할 수 â,¬62.03 수있는 유일한 방법은 배열 ('Â을 다음과 같은 코드로 통화 기호를 설정하는 것이 었습니다 £ '=>'GBP ','â,¬ = = 'EUR'); – webber