Вы указываете ожидаемый формат. Если формат не соответствует, НЕ принимайте значение - попросите пользователя исправить его!
Определите ваши дела: что является действительным, что может быть принято с небольшой доброй волей, что является недействительным?
США: 1 000 000,25
ЕС: 1.000.000,25 (большая часть ЕС)
P.S .: Для базы данных вам понадобится точка в качестве десятичного разделителя.
Edit:
В большинстве случаев достаточно объявить десятичный разделитель и разделитель тысяч, а затем полностью удалить разделитель тысяч из строки (это не имеет смысла, а просто помогает улучшить читаемость).
Убедитесь, что в оставшейся строке есть только один десятичный разделитель. Если вы разрешите числа без десятичного разделителя, то также будет принят ноль. Не более ... и убедитесь, что остальное только цифры.
Когда все это дано, вы можете преобразовать строку в формат, понятный базе данных.
Пример кода (попробуй сам)
$thousandSeparator = '.';
$decimalSeparator = ',';
$incoming = '1005.666.322,56';
$working = str_replace($thousandSeparator, '', $incoming);
$isOk = preg_match('/^[0-9]+'.($decimalSeparator).'{0,1}[0-9]*$/', $working);
$converted = str_replace($decimalSeparator, '.', $working);
$formatted = number_format($converted, 2, $decimalSeparator, $thousandSeparator);
var_dump($isOk, $incoming, $working, $converted, $formatted);