Я не могу использовать класс money_format
или NumberFormatter
. Я дал пользователям возможность определить, какой десятичный разделитель они хотят использовать - запятую или точку.PHP, работающий с деньгами из разных мест
// , 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, ',', '');
}
Но это не будет работать по нескольким причинам:
- значение может иметь два, три или более сепараторов (1.000.000,50 или 1,000,000.50)
- мне нужно идентифицировать сепаратор значения
- мне нужно проверить, если значение имеет какие-либо десятичные значения
1. Удалите все разделители с помощью регулярного выражения. 2. 'number_format()' с соответствующими разделителями, указанными вашим пользователем. – Cfreak