Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将货币字符串转换为十进制PHP_Php_Regex - Fatal编程技术网

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

将货币字符串转换为十进制PHP,php,regex,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 =>

我需要将货币字符串转换为十进制,以便将其存储在“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\u replace
,但没有成功

我怎样才能解决这个问题

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

这个数字只有两位数,我可以搜索
(,|.)[0-9]{2}
并将其替换为
[0-9]{2}
。(对不起,我不太懂正则表达式)

编辑#2:

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

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

试试这个
$variable=数字_格式((浮点)$variable,0,'.00',''

由于您的结构存在差异,因此没有一个一刀切的解决方案


如果所有的可能性都是使用逗号作为小数点分隔符,这将是微不足道的(通过Marc B提供的代码片段),但您的第四项违反了这一规则。

到目前为止您都做了什么共享代码?您必须手动更改输入的数字,因为它们不是有效的php数字。任何自动转换(例如通过类型转换)都会在
1.500,50
之类的事情上彻底失败,因为
不是有效的数字分隔符,例如,对于其中一些数字,
str_replace(',',',','。没有一条规则可以用于此,因为您的输入基本上是随机的
1500,50
v.s.
1500.50
。您需要先制定一套清晰的转换规则。现在,我看不出一个清晰的模式。这会让
10.550.670,67
,因为这是一个完全无效的“数字”。使用它,我将数字四舍五入
10.550.670,67
=>
11
为什么不使用preg_replace将“.”替换为空,将逗号替换为“.”
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;
}