php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.03.2007, 12:48  
Neuer Benutzer
 
Registriert seit: 07.09.2006
Beiträge: 24
Ticos
Standard Regulärer Ausdruck für Preis (float)

Grüß Euch!

Habe hier ein kleines Problem:
Mit folgendem Ausdruck überprüfe ich ein Formulareingabefeld darauf, ob ein gültiger Preis eingegeben wurde. Gültig wäre hier:
15 oder 15,2 oder 15,20.
Also beliebig viele Zeichen vor dem Komma und FALLS ein komma folgt, dann müssen ein bis höchstens zwei zahlen folgen.

FOlgendes habe ich schon probiert:
$pattern = '@\d*\,\d{2}@i';

Aber der nimmt irgendwie sogar 3 nachkommastellen an! Ich - als kein regex-held - war hier mit meinem latein am ende.

Vielen Dank schonmal für Euere Hilfe.
Ticos ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.03.2007, 13:04  
CIX88
Gast
 
Beiträge: n/a
Standard

Zunächst musste schon von Anfang bis Ende prüfen, also ^ ... $
Beim Komma kannst dir \ ersparen werden, also \d+,...
Ich würde das ganze dann etwas so machen: ^(\d+,\d{1,2}|\d+)$ ...
(jetzt nicht ausprobiert)
 
Alt 06.03.2007, 13:04  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Öh, naja, verwende selbst ungern die \x-Klassen ^^ Dein Pattern sieht allerdings sooo falsch nicht aus, jedoch etwas unstrukturiert

Code:
~^\d+,\d{1,2}$~i
OK, was heb ich geändert?

1. Ich habe den Start- (^) und End- ($) Anker gesetzt, damit er auch die komplette Zeichenkette vergleicht. Das dürfte auch der Fehler gewesen sein, weil er die Zeichenkette natürlich gefunden hat, sich davor und dahinter aber noch weiter Zeichen befinden dürfen. Den folgenden String dürfte dein Pattern damit ebenfalls matchen.
Code:
ab1,23ccc
2. Komma werden meines Wissens nicht escaped. Zumindest ist mit die Kontrollbedeutung grad nicht klar ^^ Wenns damit nicht funktioniert, setze den Backslash wieder vor das Komma
3. Ich hab den Quantor von der ersten Zahlenmenge mal in >1 statt >0 geändert, damit er auch vor dem Komma eine Zahl erwartet.
Code:
,12
Das macht jetzt nicht mehr.
4. Ich habe den Quantor von der zweiten Zahlenmenge in 1-2 anstatt 2 geändert, weil er ansonsten eigentlich einstellige Nachkommastellen nicht akzeptieren dürfte.
Code:
1,1
Das macht jetzt auch. (Wenn vorher scho, weiß ichs auch net )
5. Ich hab die Delimiter geändert. Das hat aber keine effektive Bedeutung. Find die bloss chicer und die Tilde ~ ist das seltenste Zeichen, welches in einem String auftaucht

Wie gesagt: Das generelle Probleme dürfte gewesen sein, dass der Anfang und das Ende nicht festgelegt wurde (Punkt 1).


Edit:
@CIX: Bei dir darf die Nachkommastelle auch wieder mehr als 3 Stellen betragen (+ 1 oder mehr mal).Ansonsten auch schlüssige Möglichkeit. Und das du Ganzzahlen auch ohne Komma möglich machst, ist schon schlüssig:
Code:
~^\d+(,\d{1,2})?$~
Edit2: Ah, Problem scho erkennt
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 06.03.2007, 13:06  
CIX88
Gast
 
Beiträge: n/a
Standard

Modifer i ?
Achsooooo, für kleine und große Zahlen

EDIT:

Ohje, alles Zeitgleich getippt hier
 
Alt 06.03.2007, 13:18  
Neuer Benutzer
 
Registriert seit: 07.09.2006
Beiträge: 24
Ticos
Standard

Vielen Dank für die aufschlußreichen Antworten.

Ich benutze nun den Ausdruck ~^\d+(,\d{1,2}|\d+)$~ mit folgendem Ergebnis:
15 (true)
15,1 (true)
15,12 (true)
15, (false)
15,123 (false)
,12/,1/,123 (false)

Die Funktion ist also korrekt.
Danke für die ausführliche Erklärung.

Gruß,
Ticos
Ticos ist offline  
Alt 06.03.2007, 13:32  
CIX88
Gast
 
Beiträge: n/a
Standard

Moment, du hast nur einfach kopiert und irgendwas zusammen gefügt.

entweder: ^(\d+,\d{1,2}|\d+)$
oder: ~^\d+(,\d{1,2})?$~
 
Alt 06.03.2007, 13:37  
Neuer Benutzer
 
Registriert seit: 07.09.2006
Beiträge: 24
Ticos
Standard

Ah ich habe das Fragezeichen vergessen. (damit die Abfolge nicht wiederholt werden darf).

Danke für den Hinweis!
Ticos ist offline  
Alt 06.03.2007, 13:45  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

PHP-Code:
<?php
function isMoneyAmount($mValue)
{
    return (bool)
preg_match('#^[0-9]+(,[0-9]{1,2})?$#'$mValue);
}
?>
Ich nehm den Fred hier mal in meine Lesezeichen, die Frage taucht ja auch alle Nas lang mal auf.
Zergling-new ist offline  
Alt 06.03.2007, 13:53  
CIX88
Gast
 
Beiträge: n/a
Standard

preg_match gibt doch schon 0 oder 1 zurück ...
 
Alt 06.03.2007, 14:15  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Öh .. ja, und? Find Vergleiche auf Boolean allerdings auch chicer, wenn es eine Ja-Nein-Abfrage ist, vorallen da ich 90% mittlerweile per Identität (===) Vergleiche.
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Bereich um einen float left und float right Bereich andrew22 HTML, Usability und Barrierefreiheit 8 27.02.2007 18:27
Logischer Ausdruck aus DB überprüfen c!w PHP Tipps 2006 15 12.09.2006 13:36
Float für Fortgeschrittene axelnes HTML, Usability und Barrierefreiheit 5 12.04.2006 10:29
Mit if Abfrage innerhalb eines strings einen Ausdruck suchen tinchen PHP Tipps 2006 4 11.04.2006 10:18
Regul�rer Ausdruck PHP Tipps 2006 3 01.02.2006 19:50
Float bei zwei DIVs HTML, Usability und Barrierefreiheit 14 29.01.2006 10:54
[Erledigt] arges float Problem HTML, Usability und Barrierefreiheit 9 30.04.2005 14:31
CSS: 2 Spalten á 50% ohne float HTML, Usability und Barrierefreiheit 2 31.03.2005 14:37
float: right; hängt unten raus HTML, Usability und Barrierefreiheit 6 31.03.2005 14:17
$_GET['var1'] prüfen ob Float PHP Tipps 2005 4 17.02.2005 17:57
vom double zu int bei preis Mutatos PHP Tipps 2005 3 06.01.2005 16:50
CSS: Probleme mit float:!! 18inch HTML, Usability und Barrierefreiheit 1 30.12.2004 13:55
[Erledigt] Preis gestaffelt berechnen in PHP PHP Tipps 2004-2 5 09.11.2004 14:23
Unknown column 'preis' in 'field list' Xfer Datenbanken 4 01.11.2004 10:34
Preis in einem Shop (Computer-Konfigurator) aktualisieren PHP Tipps 2004 10 27.09.2004 14:33

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
regulärer ausdruck preis, reguläre ausdrücke komma, reguläre ausdrücke float, regulärer ausdruck kommazahl, regulärer ausdruck float, regulärer ausdruck komma, reguläre ausdrücke preis, reguläre ausdrücke kommazahlen, regulärer ausdruck double, reguläre ausdrücke double, regulärer ausdruck für float, reguläre ausdrücke kommazahl, regulärer ausdruck kommazahlen, reguläre ausdrcüke preis, regulärer ausdruck für double, regulärer ausdruck nachkommastellen, regulärer ausdruck für preis, reguläre ausdruck double, php reguläre ausdrücke komma, float regulärer ausdruck

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:36 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.