Price Validation muss besprochen werden
@peat @mor vor jahrtausenden habt ihr einmal eine Preisvalidation geschrieben.
Aus einer Zahl oder einem String macht ihr ein float Wert.
Diese Validierung ist in meinen Augen aber extrem fehlerhaft.
Entweder habe ich diese nicht richtig übernommen oder ihr habt gewisse Angaben nicht beachtet.
Euer Code schaut so aus:
<?php
if ($thousands !== false && $decimal === false) {
if (\mb_substr($value, -4, 1) === $thousandSeparator) {
$value = \str_replace($thousandSeparator, '', $value);
}
}
if ($thousands === false && $decimal !== false) {
$value = \str_replace($decimalSeparator, '.', $value);
}
if ($thousands !== false && $decimal !== false) {
$value = \str_replace($thousandSeparator, '', $value);
$value = \str_replace($decimalSeparator, '.', $value);
}
return \round(\floatval($value), 4) * $negativeTurn;
Meiner schaut so aus:
<?php
if (\strpos($value, $decimalSeparator) !== false && \strpos($value, $thousandSeparator) !== false) {
$value = \str_replace($decimalSeparator, '', $value);
}
$value = \str_replace($thousandSeparator, '.', $value);
$value = \floatval($value);
return \round(\floatval($value), 4) * $negativeTurn;
Das ganze müssten wir einmal besprechen ob die Änderungen für euch ok sind.
Beispiele zum Testen wären:
- 4,4
- 4,40
- 4,123
- 4.123
- 4.4
- "4,4"
- "4.4"
Da das ganze sehr tief ist, müssen da mehrere drüber schauen.
Problem:
- Das Problem an dem Vorgehen davor war, es ging davon aus, das Preise immer perfekt angegeben werden. Ein 4,4 hat schlichtweg dann mal eine 4 draus gemacht.
Commit welcher das ganze behebt:
Datei:
von Henning Leutz bearbeitet