2010-12-27 3 views
1

나는 정규식에 약간의 문제가있다. $ 28.84와 같은 돈을 가지고 페니로 데이터베이스에 저장하려고한다. 지금은 나는 또한 "," ""아무것도하지 진수의 수를 제거하기 위해 노력하고있어이페니에 달러

$amount="$28.84"; 
$amount_number= ereg_replace("[(^0-9)(.)(0-9){2}]", "", $amount); //return a decimal 
$store_amount = $amount_number*100; //get number of pennies 

을 사용하고 있습니다.

+0

내가 오류 조건에 좀 더 정보가 필요합니다. 즉, $amount이 올바른 형식인지 여부를 이미 확인 했습니까? 소수점이 너무 많거나 너무 적은 경우에는 어떻게해야합니까? 잘못된 문자입니까? 숫자 이외의 것이 단순히 제거되었다고 말하는 것 같지만, 그게 실제로 원하는 것인지 확인하려고 노력하고 있습니다. – Andrew

+0

그리고 당신의 문제는 무엇입니까? –

+2

ereg를 사용하지 마십시오 : 더 이상 사용되지 않습니다. –

답변

5

나는이 잘못에 대해 생각합니다. 왜 달러 기호를 바꾸지 않고 floatval을 사용하고 100을 곱하십시오. 그런 다음 intval을 사용하여 페니의 분수를 원하지 않으므로 결과에서 십진수를 제거하십시오.

$amount = intval(floatval(str_replace("$", "", $amount))*100); 

필자는 테스트하지 않았지만, 이와 같이하면 효과가 있습니다.

일부 사람들이 통화 물건을 취급하는 방법을 보려면 여기를 확인하십시오.
http://php.net/manual/en/function.floatval.php

+0

쉼표로 표시되는데이 값은 얼마입니까? – BandonRandon

+0

잘 모르겠습니다 - 시도해 보거나 쉼표를 빈 문자열로 바꾸어도됩니다. 첫 번째 둘레에 다른 'str_replace'를 추가하십시오. – zsalzbank

+0

+ 1 산술 절차에 정규식을 사용하는 것은 터무니 없습니다. – cbrandolino

0
$amount = "$28.84"; 
$amount_number = floatval(substr($amount,1)); 
$store_amount = $amount_number*100.0; 

달러 기호를 제거하려면 substr을 사용해도됩니다. 당신이 정말로 정규식을 사용하려는 경우,이 시도 :

$amount = "$28.84"; 
$amount_number = floatval(preg_replace('/[^\d\.]/', '', $amount)); 
$store_amount = $amount_number*100.0; 

당신은 float로 문자열에서 양을 변환 floatval를 사용해야합니다.

1
[(^0-9)(.)(0-9){2}] 

[0-9.] 

당신은() [] 내에서 사용할 수 있어야한다 : 그들은 많은 방법이있다. [] 안에 사용할 수있는 유일한 특수 문자는^문자입니다.

4

입력이 이미 검증되었다고 가정하면 모든 비 숫자를 제거한 다음 int_val을 사용하여 결과를 정수로 변환하십시오.

개인적으로 나는 $12.3과 같은 모든 비표준 입력을 거부합니다. 제 의견으로는 돈을 다룰 때 어떤 입력을 받아들이 느냐에 대해 엄격해야하며 의미가 무엇인지 추측하지 않아야합니다.

+1

소수점 다음에 항상 정확히 두 자리가 있다고 가정합니다. 그렇지 않으면 23.4 및 2.34는 동일한 정수로 변환됩니다. –

+0

+1. 일부 링크 : http://www.google.com/search?q=floating+point+limitations http://docs.sun.com/source/806-3568/ncg_goldberg.html – asveikau

+0

자바 스크립트 측에서 유효성 검사가 진행 중입니다. 누군가가 javascript를 사용하지 않고 어리 석다면 위대한 일을해야합니다. – BandonRandon

0

왜 달러 기호를 제거하고 100을 곱하면 어떨까요?

preg_replace (/ \ $ /, "", $ amount);

+0

쉼표도 제거해야합니다. – BandonRandon

0

는 다음에 두 번째 줄을 chaning보십시오 :

$amount_number= ereg_replace("[^0-9.]", "", $amount); 
+0

나는 이것을 시도했다. 이것은 또한 십진수를 제거한다. 그래서 $ 5.00은 500이되고 500000은 $ 500이 아닌 $ 5를 반환한다. – BandonRandon

+1

. 그 금액을 페니로 변환하기 위해 100을 곱할 필요가 없습니다. – Chandu

1
$amount = "$28.84"; 
$amount = preg_replace("#([^0-9\.]+)#", "", $amount); 
$amount = explode(".", $amount); 
$amount = (intval($amount[0]) * 100) + intval($amount[1]); 
echo $amount; //2884 
+0

이 답변은 나에게 도움이되었다. 문제가 해결되었다. 감사! 건배! –

관련 문제