PHP работает с деньгами из разных регионов

Я не могу использовать 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, ',', '');
}

Но это не сработает по нескольким причинам:

  1. Значение может иметь два, три или более разделителей (1.000.000,50 или 1,000,000.50)
  2. Мне нужно определить разделитель значения
  3. Мне нужно проверить, если значение имеет десятичные значения

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);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]