我无法使用money_format
或NumberFormatter
类。
我让用户可以定义他们想要使用的小数分隔符 - 逗号或点。
// , or .
$decimal_separator = getUserDecimalSeparator();
现在,用户可以在input
字段中引入以下值:
1,200.10
1.500,21
1,50
1.35
1500.10
1900,21
我需要格式化这些值以正确插入数据库。我在数据库中的字段是double(10,2)
。
为了处理用户插入的值,我希望将它们转换为(总是使用点作为小数分隔符,而不使用千位分隔符):
1200.10
1500.21
1.50
1.35
1500.10
1900.21
所以我想到了一个可以帮助我转换价值的功能。
function formatMoneyToDatabase($value, $separator)
{
$value = str_replace('.', ',', $value);
if($separator == ',')
return number_format($value, 2, '.', '');
return number_format($value, 2, ',', '');
}
但是由于以下几个原因,这项工作无法实现:
答案 0 :(得分:0)
解决了,我相信。
我在stackoverflow中找到了一个无法链接的解决方案,因为我丢失了链接,但解决方案是使用正则表达式。
if(!function_exists('formatMoneyToDatabase'))
{
function formatMoneyToDatabase($value)
{
return preg_replace('/[^\d]/', '', $value) / 100;
}
}
100,000,000.12 -> 100000000.12
75.000,12 -> 75000.12
50.000.000 -> 50000000
12,000,000 -> 12000000
注意:我之前在另一个正则表达式函数中验证了价格。
return preg_match('/^[0-9]+(?:\.[0-9]{2,' . $decimal_places . '}+)?$/', $price);