• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Formulareingabe: Nur Zahl, Punkt oder Komma

Lucky777

New member
Hallo,

ich möchte in meinen Suchformular für einige Eingegabefelder nur Dezimalzahlen erlauben. Wird ein Komma verwendet, soll dieses durch einen Punkt ersetzt werden. Werden ungültige Zeichen verwendet soll die Eingabe zurückgesetzt werden (Leerstring), damit das entsprechende Feld nicht in der Suche berücksichtigt wird. Ich sitze nun schon seit einiger Zeit vor diesem Problem und habe folgenden Code geschrieben, der leider nicht funktioniert:

PHP:
<?php

// Testskript

$eingabe = '0,4';

$eingabe = str_replace(',', '.', $eingabe);

echo $eingabe; // 0.4

echo '<br />';

if (!eregi('[0-9\.]', $eingabe)) { 
	$eingabe = '';
}

echo $eingabe; // wird str_replace() aus dem Code gelöscht, soll aus '0,4' ein Leerstring werden

?>

Weiß jemand wo der Fehler liegt?

Schöne Grüße und vielen Dank!
 
Zuletzt bearbeitet:
Danke für den Post. So funktioniert es nun:

PHP:
if (!preg_match('/^[0-9\.]+$/', $eingabe = str_replace(',', '.', $eingabe))) { // muss der Backslash sein?!?
	$eingabe = '';
}

Noch eine Frage: Erkennt MySQL ".4" als "0.4" bzw. "4." als "4.0" oder soll/muss ich das über PHP regeln?
 
Zuletzt bearbeitet:
Dein Regex dürfte auch Eingaben wie .4.5.6.7 akzeptieren.
Da wird die DB sich freuen :)

Empfehle diesen Regex zur Anwendung NACHDEM Komma durch Punkt ersetzt wurde:
/^\+?(\d+|\d*\.\d{1,2})$/
Und wenn der Wert auch negativ sein darf diesen:
/^\-?(\d+|\d*\.\d{1,2})$/
Hinweis: Der ist für zwei Stellen nach dem Dezimaltrenner also z.B. für Euro-Beträge.
Zur letzten Frage: Ja, das sind alles Maschinenwerte die die DB versteht.
 
Zuletzt bearbeitet:
Dein Regex dürfte auch Eingaben wie .4.5.6.7 akzeptieren.
Da wird die DB sich freuen :)

Haha stimmt, das habe ich nicht beachtet.

Empfehle diesen Regex zur Anwendung NACHDEM Komma durch Punkt ersetzt wurde:
/^\+?(\d+|\d*\.\d{1,2})$/

Ich kann deinen Regex zwar nicht lesen (3 Monate PHP/MySQL Erfahrung), aber er ist jedenfalls intelligenter als meiner, danke!

Nein, du musst das Format der Spalte anpassen. mysql bietet dafür vielfältige Möglichkeiten.

Der Spaltenyp ist "DECIMAL", näheres muss ich mir erst ansehen.


Auch interessant, danke!
 
Zuletzt bearbeitet:
Zurück
Oben