Я не могу использовать 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, ',', '');
}
Но это не сработает по нескольким причинам:
решаемая, Я верю.
Я нашел решение в 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);
Других решений пока нет …