PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Regulären Ausdruck formulieren


jan84
13.09.2005, 12:27:21
Hallo,

mit den reg. Ausdrücken habe ich immer wieder Probleme. Kann mir jemand ein Muster formulieren? Ich möchte eine Variable auf folgendes Format prüfen:
Es dürfen nur Ziffern verwendet werden. Gibt es Nachkommastellen, dann darf nach beliebig vielen Ziffern ein Komma folgen. Es darf max. zwei Nachkommastellen geben.
Hört sich jetzt etwas strange an, es soll aber wirklich ein String sein, also als Dezimaltrennzeichen ein ',' und kein '.'.
Ich habe es hiermit probiert:

function isfloat($float) {
$muster = '/^[0-9]+(,{1}[0-9]{1,2})?$/';
$bool = preg_match($muster, $float);

if($bool) return 1;
else return 0;
}

Damit werden zwar nur Ziffern und ',' akzeptiert und keine Buchstaben. Allerdings wird beispielsweise auch für '2345,2135,25,25' oder '2,333' der Wert 1 zurück gegeben.

Gruss
Jan

c4
13.09.2005, 12:30:36
Warum nicht is_float()?
--> http://php.net/is_float

xabbuh
13.09.2005, 12:34:00
Damit werden zwar nur Ziffern und ',' akzeptiert und keine Buchstaben. Allerdings wird beispielsweise auch für '2345,2135,25,25' oder '2,333' der Wert 1 zurück gegeben.
Das Problem kann ich nicht nachvollziehen. Dein regulärer Ausdruck sieht auch richtig aus. Ich habe ihn nur mal ein wenig vereinfacht:

<?php
$muster = '/^\d+(,\d{1,2})?$/';
?>

xabbuh
13.09.2005, 12:34:42
Warum nicht is_float()?
--> http://php.net/is_float
Für is_float() müsste er als Trennstelle einen Punkt statt ein Komma verwenden.

feuervogel
13.09.2005, 13:23:36
Für is_float() müsste er als Trennstelle einen Punkt statt ein Komma verwenden.

str_replace( ',' , '.' , ... ?

xabbuh
13.09.2005, 14:03:39
str_replace( ',' , '.' , ... ?
str_replace() liefert ja einen String zurück...

c4
13.09.2005, 14:04:49
(float)str_replace(',', '.', $var);

:)

feuervogel
13.09.2005, 14:34:24
str_replace() liefert ja einen String zurück...

also du wirst mir jetzt nicht mit php und datentypen kommen, ja? ;-P

xabbuh
13.09.2005, 14:39:26
also du wirst mir jetzt nicht mit php und datentypen kommen, ja? ;-P
Wenn du es hinterher durch is_float() jagen willst, bleibt dir gar nichts anderes übrig... ;-)

jan84
13.09.2005, 14:48:16
Naja, das ist schon richtig. Ich könnte auch is_float() nehmen. Aber es ist ja nicht weniger umständlich. Ich muss ja auch hier und da was umwandeln. Und mit is_float() kann ich die Prüfung nicht auf 2 Nachkommastellen beschränken. Also ist denke ich ein reg. Ausdruck das naheliegenste Verfahren...

@xabbuh:
$muster = '/^\d+(,\d{1,2})?$/';
Danke. Das funktioniert. Es ist peinlich aber wahr: Der Fehler lag nicht am reg. Ausdruck, sondern an einer damit verbundenen if-Bedingung. Sorry!