Конвертировать строку валюты в десятичный 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 но я не мог.

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

Edit # 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: Пожалуйста, удалите этот ответ.

2 ответа

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

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

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

Другие вопросы по тегам