Преобразование строки валюты в десятичный PHP

Мне нужно преобразовать строку валюты в десятичную для хранения ее в базе данных типа «десятичный (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 => 1500.50 10.550.670,67 => 10550670.00 1.506,0 => 1506.00 

Я пытался с preg_replace но не мог.

Как я могу решить эту проблему?

Редактировать # 1: Это моя функция, первая preg_match работа отлично, теперь мне нужно преобразовать $number в формат "xxxx.xx"

 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; } 

Номер имеет только две цифры, я могу найти (,|.)[0-9]{2} и заменить его на .[0-9]{2} . (извините, но я плохо с регулярным выражением).

Редактировать # 2:

На моем веб-сайте пользователи могут установить цену, если пользователь из США, он будет использовать 1,222,33 или 1222,33, если пользователь из Аргентины, он будет использовать 1.222,33 или 1222,33, теперь мне нужно преобразовать число в формат 1222.33 для хранения его в базе данных с десятичным типом.

Редактировать # 3: Пожалуйста, удалите этот ответ.

Из-за дисперсии в ваших структурах не существует единого размера для всех решений.

Если КАЖДАЯ возможность использовала запятую в качестве разделителя с десятичной запятой, это было бы тривиально (через код, отрезанный от Marc B), но ваш 4-й элемент нарушает это правило.

Попробуйте переменную $ variable = number_format ((float) $, 0, '.00', '');