将货币字符串转换为十进制PHP
我需要将货币字符串转换为十进制,以便将其存储在“decimal(9,2)”类型的数据库中。例如:将货币字符串转换为十进制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 =>
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;
}