2011-05-05 1 views
2
내가 누군가의 도움이 필요

, 나는 많은 감사가 어떻게 통화 형식으로 모든 숫자가 아닌 문자를 교환 할 수

내가 통화 형식/오른쪽

으로 교환 할면을 왼쪽으로 몇 가지 샘플 아래

을 주셔서 감사합니다겠습니까

  • 123,00에 123.00
  • 1.123,00 €
  • 1,123.00에 $ 11.123,00에 11,123.00
  • 12.123,00 ZH 12,123.00
  • ,536,913에 63,210
  • 12.123,00cH에 12,123.00
  • £ 1.123.123,00 1,123,123.00에
  • 112,312,300 KN에 1,123,123.00

또는 예를 들어

  • 1,123.00 €에 1,123.00
  • $ 11.123.00에 11,123.00
  • 12,123,00 ZH
  • 12.123,00cH 12,123.00에
  • 12,123.00에 £ 1.123,123,00 1,123,123.00
  • 11 , 231230.0 KN ~ 1,123,123.00

왼쪽의 내용은 변경해야합니다. 천 자리와 소수점 자리로 점으로 쉼표,

preg_replace이다 또는 않는 str_replace을 사용하여 수행 할 수있는 것,하지만 난 무엇을해야하는지?

답변

2

숫자가 아닌 문자는 잘라낸 다음 number_format()을 전달하십시오. 원래 제로 후 소수점 첨가 이후

$val = preg_replace("/[^0-9]/", "", "11,231230.0 KN")/100; 
$formatted = number_format($val, 2, ".", ","); 

// Outputs 1,123,123.00 

EDIT/ 100 첨가.

+1

이봐 요, 나는 그 생각을했으면 좋겠어 :)이 주석에 유용한 것을 추가하기 위해, 기본값은 아메리칸 형식 ('.' 소수 구분 기호,'. ')이므로'number_format'의 마지막 두 인수는 필요하지 않습니다. ','1000 구분자). – eykanal

+0

이 코드를 이용해 주셔서 감사 드리며, 원래 번호에 소수점 이하 자릿수가 없으면/100이 작동하지 않는다는 것을 추가/지적하고 싶습니다. – hyarion

1

가장 쉬운 방법은 먼저 숫자가 아닌 모든 것을 제거한 다음 number_format을 사용하는 것입니다.

// assuming $str holds the original string 
$str = preg_replace('/[^0-9]/', '', $str); // now just a string of numbers 
$str = number_format($str, 2); // 2 decimal places 
+0

Oof. 죄송합니다. 내 게시물 대신 내 게시물을 편집했습니다. 그것을 원한다. –

0

당신은 내가 일하고 있어요 프로젝트의 형식을 정상화 통화에서 동일한 작업을 수행해야했다

print number_format(preg_replace('/\D/', '', $number), 2, '.', ','); 
0

시도 할 수 있습니다.

if (strpos($string, '.') === false 
     && strpos($string, ',') === false 
    ) { 
     $string .= '.00'; 
    } 

    $string = preg_replace('/[^0-9.,]/', '', $string); 

    $string = preg_replace('/[.,]/', '.', $string); 

    while (
     strpos($string, '.') != strrpos($string, '.') 
     || strlen($string) - 1 - strrpos($string, '.') > 2 
    ) { 
     $pos = strpos($string, '.'); 
     if ($pos > 0) { 
      $string = substr($string, 0, $pos) . substr($string, $pos +1); 
     } else { 
      break; 
     } 
    } 

    return (float)$string; 

그리고 마지막으로가 number_format()을 사용하는 숫자가 아닌 문자로

// these are my unit test check 
0.00 returned by filtering 0 
0.20 returned by filtering 0.2 
0.20 returned by filtering 0,2 
0.22 returned by filtering 0.22 
0.22 returned by filtering 0,22 
18.20 returned by filtering 18.2 
1000.00 returned by filtering 1 000 
1000.00 returned by filtering 1,000 
1000.00 returned by filtering 1,000.00 
1000.00 returned by filtering 1000,00 
1000.00 returned by filtering 1 000,00 
1000.20 returned by filtering 1 000,2 
1000.20 returned by filtering 1 000,20 $ 
1000.20 returned by filtering abc1def00test0dot.twenty20 

및 기타 조합의 인터레이스 : 이러한 입력을 #####.##로 포맷하고 지원하는 경우

코드는 출력 문자열을 재 작업한다 표준화 된 번호를 다시 포맷하십시오.