我在使用正则表达式时遇到了一些问题我正试图花钱$ 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 :(得分:5)
我认为你错了。为什么不替换美元符号,使用floatval
然后乘以100.然后使用intval
从结果中删除小数,因为您不需要一分钱的分数。
$amount = intval(floatval(str_replace("$", "", $amount))*100);
我没有测试过,但是这样的事情应该可行。
点击此处了解一些人如何处理货币问题。他们有很多方法:
http://php.net/manual/en/function.floatval.php
答案 1 :(得分:4)
假设输入已经过验证,请删除所有非数字,然后使用int_val
将结果转换为整数。
我个人会拒绝所有非标准输入,例如$12.3
。在我看来,在处理金钱时,你应该严格遵守你接受的输入,而不是试图猜测是什么意思。
答案 2 :(得分:1)
[(^0-9)(.)(0-9){2}]
应该是
[0-9.]
你不能在[]里面使用()。可以在[]中使用的唯一特殊字符是^字符。
答案 3 :(得分:1)
$amount = "$28.84";
$amount = preg_replace("#([^0-9\.]+)#", "", $amount);
$amount = explode(".", $amount);
$amount = (intval($amount[0]) * 100) + intval($amount[1]);
echo $amount; //2884
答案 4 :(得分: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;
您需要使用floatval
将金额从字符串转换为浮动。
答案 5 :(得分:0)
为什么不将美元符号和倍数删除100?
preg_replace(/ \ $ /,“”,$ amount);
答案 6 :(得分:0)
尝试将第二行更改为:
$amount_number= ereg_replace("[^0-9.]", "", $amount );