将货币字符串转换为十进制PHP

时间:2016-04-20 16:10:29

标签: php regex

我需要将货币字符串转换为十进制,以便将其存储在“decimal(9,2)”类型的数据库中。例如:

0               =>  0.00
1               =>  1.00
1500            =>  1500.00
1500,50         =>  1500.00
1500.50         =>  1500.00
1.500           =>  1500.00
1.500,50        =>  1500.50
10.550.670,67   =>  10550670.00
1.506,0         =>  1506.00

我试过preg_replace,但我做不到。

我该如何解决这个问题?

编辑#1: 这是我的功能,第一个preg_match工作正常,现在,我需要将$number转换为格式“xxxx.xx”

function formatNumber($number) {
    $isValid = preg_match("/^[0-9]{1,3}(?:[0-9]*(?:[.,][0-9]{2})?|(?:,[0-9]{3})*(?:\.[0-9]{2})?|(?:\.[0-9]{3})*(?:,[0-9]{1,2})?)$/", $number);
    if ($isValid) {
        return preg_replace("/^ THIS FAIL $/", "", $number);
    }
    return 0;
}

该号码只有两位数,我可以搜索(,|.)[0-9]{2}并将其替换为.[0-9]{2}。 (抱歉,我对正则表达式不好)。

编辑#2:

在我的网站上,用户可以设定价格,如果用户来自美国,他将使用1,222.33或1222.33,如果用户来自阿根廷,他将使用1.222,33或1222,33,现在,我需要转换格式为1222.33的数字,用于将其存储在具有十进制类型的数据库中。

编辑#3:请删除此答案。

2 个答案:

答案 0 :(得分:0)

由于您的结构存在差异,因此不适合所有解决方案。

如果每次使用逗号作为小数点分隔符,这将是微不足道的(通过Marc B提供的代码剪断),但是你的第4项违反了该规则。

答案 1 :(得分:-3)

试试这个 $ variable = number_format((float)$ variable,0,' .00','');