Skip to content

Instantly share code, notes, and snippets.

@praul
Created January 8, 2025 08:27
Show Gist options
  • Save praul/1f05ce69df15f3c43a207b5ef8fa5dfc to your computer and use it in GitHub Desktop.
Save praul/1f05ce69df15f3c43a207b5ef8fa5dfc to your computer and use it in GitHub Desktop.
Takes every formated number (1.602,00 | 1,602.00), recognizes format and outputs float
<?php
// Danke ChatGPT
function parseFormattedNumber(string $numberString): float
{
// Entferne alle Leerzeichen, um sicherzustellen, dass es keine unerwarteten Zeichen gibt
$numberString = str_replace(' ', '', $numberString);
// Überprüfe das Format: Punkt als Tausender-Trenner und Komma als Dezimaltrenner
if (preg_match('/^\d{1,3}(\.\d{3})*(,\d{2})?$/', $numberString) || preg_match('/^\d+(,\d{2})?$/', $numberString)) {
// Ersetze Punkte (Tausender-Trenner) und Komma (Dezimaltrenner)
$normalizedNumber = str_replace(['.', ','], ['', '.'], $numberString);
}
// Überprüfe das Format: Komma als Tausender-Trenner und Punkt als Dezimaltrenner
elseif (preg_match('/^\d{1,3}(,\d{3})*(\.\d{2})?$/', $numberString) || preg_match('/^\d+(\.\d{2})?$/', $numberString)) {
// Ersetze Kommas (Tausender-Trenner)
$normalizedNumber = str_replace(',', '', $numberString);
} else {
// Falls kein bekanntes Format erkannt wird, Exception werfen
throw new InvalidArgumentException("Ungültiges Zahlenformat: $numberString");
}
// Konvertiere die normalisierte Zahl in einen Float
return (float) $normalizedNumber;
}
// Beispielnutzung:
try {
echo parseFormattedNumber("1.602,00"); // Ausgabe: 1602
echo "\n";
echo parseFormattedNumber("1,602.00"); // Ausgabe: 1602
echo "\n";
echo parseFormattedNumber("1602"); // Ausgabe: 1602
echo "\n";
echo parseFormattedNumber("1602.00"); // Ausgabe: 1602
echo "\n";
echo parseFormattedNumber("1602,00"); // Ausgabe: 1602
} catch (InvalidArgumentException $e) {
echo "Fehler: " . $e->getMessage();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment