php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 29.07.2010, 10:15  
Erfahrener Benutzer
 
Registriert seit: 14.01.2010
Beiträge: 124
PHP-Kenntnisse:
Fortgeschritten
phpsecretary kann nur auf Besserung hoffen
Standard [Erledigt] Regulärer Ausdruck

Morgen,

ich möchte einen regulären Ausdruck erstellen, der die Eingabe einer Summe überprüft.

Folgende Kriterien sollen erfüllt werden:

- wenn mehrstellig vor einem Komma, keine führende Null.
- Summe darf 20,00 nicht überschreiten
- Nullwert ist nicht erlaubt

Das soll erlaubt sein:

0,01
1,01
0,10
10,01
10
19,99
20
20,0
20,00

Das nicht:

01,01
20,01
0
0,0
0,00
10,

Mein Ansatz bis jetzt:

(0(?=,([0-9]*[1-9]){1,1}[0-9]*){1,2}

Eine "0" gefolgt von einem Komma und ein oder zwei Ziffern 0-9 wovon mindestens einer Ziffer 1-9 ist.

|(1{1,1}[0-9]*){1,2}

oder eine 1 gefolgt von maximal einer mögicherweise vorkommenden Ziffer 0-9

|2(?=(0|0,|0,00)))

oder eine 2 aber nur wenn diese von "0" oder "0,0" oder "0,00" gefolgt wird

,{0,1}

gefolgt von einem möglicherweise einmal vorkommenden Komma

[0-9]{0,2}

gefolgt von ein oder zwei möglichweise vorkommenden Ziffern 0-9


<?php

$test = '19,01';

if (preg_match('/^(0(?=,([0-9]*[1-9]){1,1}[0-9]*){1,2}|(1{1,1}[0-9]*){1,2}|2(?=(0|0,|0,00))),{0,1}[0-9]{0,2}$/',$test)) echo 'ok';
else echo 'nicht ok';

Da scheint aber der Wurm drin zu sein :-/

Könnte mir jemand helfen?

If ($betrag >20||$betrag<0.01) ginge natürlich auch. Ich möchte aber nicht den Betrag prüfen, sondern den regulären Ausdruck dafür erstellen.
__________________
Ich bin Programmierer und kein Frameworkinstallierer.

Geändert von phpsecretary (29.07.2010 um 10:29 Uhr).
phpsecretary ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 29.07.2010, 11:25  
Erfahrener Benutzer
 
Registriert seit: 14.01.2010
Beiträge: 124
PHP-Kenntnisse:
Fortgeschritten
phpsecretary kann nur auf Besserung hoffen
Standard

Ich bin jetzt hier:

^((0{1,1}(?=,([0-9]*[1-9]{1,1}[0-9]*){1,2}))|(1{1,1}[0-9]{0,1})|(2{1,1}(?=(0|,0|,00|0,0|0,00){0,1}))|[3-9]{1,1}(?=,{1,1}))(,{1,1}[0-9]{1,2}){0,1}$


Mein spezielles Problem sind die Nachkommastellen einer 20

(2{1,1}(?=(0|,0|,00|0,0|0,00){0,1}))



2{1,1}

Eine 2, sofern sie einmal vorkommt

(?=

Und wenn sie gefolgt wird von

(0|,0|,00|0,0|0,00){0,1}

"0" oder ",0" oder ",00" oder "0,0" oder "0,00" oder nichts

20,99 wird aber trotzdem gematched :-/
__________________
Ich bin Programmierer und kein Frameworkinstallierer.
phpsecretary ist offline  
Alt 29.07.2010, 11:26  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Wie wäre es mit einem anderen Ansatz? Teile den String am Komma auf und arbeite dann mit Bedingungen und einfacheren Ausdrücken. Um die größe einer Zahl zu prüfen, eignet sich ein regulärer Ausdruck meiner Meinung nach nicht so gut.
Asipak ist offline  
Alt 29.07.2010, 11:30  
Erfahrener Benutzer
 
Registriert seit: 15.04.2010
Beiträge: 813
PHP-Kenntnisse:
Fortgeschritten
Paul.Schramenko befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
$summe 1.11;
$summe str_replace(',''.'$summe);
if (!
is_numeric($summe) || $summe 20 || $summe 0) {
    throw new 
Exception('Invalid Sum!');
}
$summe number_format($summe2'.'''); 
__________________
"My software never has bugs, it just develops random features."
"Real programmers don't comment. If it was hard to write, it should be hard to understand!"
Positive Bewertungen sind nicht unwillkommen...
Paul.Schramenko ist offline  
Alt 29.07.2010, 11:34  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Vielleicht funktioniert dieser Ausdruck:
Code:
/^(((0,([1-9]\d?|\d[1-9])|1\d?(,\d{1,2})?))|20(,0{1,2})?)$/
Aber ich halte wie gesagt einen Ansatz wie den von Paul.Schramenko für sinnvoller. Wieso soll es denn ein regulärer Ausdruck sein?
Asipak ist offline  
Alt 29.07.2010, 11:39  
Erfahrener Benutzer
 
Registriert seit: 15.04.2010
Beiträge: 813
PHP-Kenntnisse:
Fortgeschritten
Paul.Schramenko befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von phpsecretary Beitrag anzeigen
^((0{1,1}(?=,([0-9]*[1-9]{1,1}[0-9]*){1,2}))|(1{1,1}[0-9]{0,1})|(2{1,1}(?=(0|,0|,00|0,0|0,00){0,1}))|[3-9]{1,1}(?=,{1,1}))(,{1,1}[0-9]{1,2}){0,1}$
Ich bin jetzt nicht so sicher, aber ich denke, dass mein Ansatz ein kleines bischen verständlicher ist, wenn jemand auf den Code schaut...
__________________
"My software never has bugs, it just develops random features."
"Real programmers don't comment. If it was hard to write, it should be hard to understand!"
Positive Bewertungen sind nicht unwillkommen...
Paul.Schramenko ist offline  
Alt 29.07.2010, 11:41  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von Paul.Schramenko Beitrag anzeigen
Ich bin jetzt nicht so sicher, aber ich denke, dass mein Ansatz ein kleines bischen verständlicher ist, wenn jemand auf den Code schaut...
Unwesentlich
Asipak ist offline  
Alt 29.07.2010, 11:45  
Erfahrener Benutzer
 
Registriert seit: 14.01.2010
Beiträge: 124
PHP-Kenntnisse:
Fortgeschritten
phpsecretary kann nur auf Besserung hoffen
Standard

Mir geht es nicht um die Prüfung der Zahl, sondern um die lookarounds und generelle Syntax von Regulären Ausdrücken.

Für diesen Anwendungsfall gibt es bestimmt Myrriarden weiterer Möglichkeiten der Prüfung. Auch das Exceptionhandling kann man verwenden (ich habe allerdings irgendwann mal das userdefined errorhandling eingebunden und verwende dieses stattdessen, um mich gegen die Javasierung von PHP zu wehren und nachfolgende Entwickler zu verwirren: trigger_error('Invalid Sum!', E_USER_NOTICE). Ist alles eine Frage der Klassifizierung von Fehlern...

Um noch mal auf meine eigentliche Frage zurück zu kommen...

Hat zufällig jemand grade O'Reilly's "Reguläre Ausdrücke" zur Hand und kann mal für mich nachschlagen so ca. ab der Hälfte des Buchs (den Teil den ich damals nur überflogen habe *tüdelü*)?

__________________
Ich bin Programmierer und kein Frameworkinstallierer.
phpsecretary ist offline  
Alt 29.07.2010, 11:49  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Hat zufällig jemand grade O'Reilly's "Reguläre Ausdrücke" zur Hand und kann mal für mich nachschlagen so ca. ab der Hälfte des Buchs (den Teil den ich damals nur überfolgen habe *tüdelü*)?
Was soll das denn jetzt werden?
Zitat:
Um noch mal auf meine eigentliche Frage zurück zu kommen...
Zitat:
Könnte mir jemand helfen?
Dann sagst du uns vielleicht lieber noch mal wobei und was das Kapitel in dem erwähnten Buch damit zu tun hat.
Asipak ist offline  
Alt 29.07.2010, 11:52  
Erfahrener Benutzer
 
Registriert seit: 14.01.2010
Beiträge: 124
PHP-Kenntnisse:
Fortgeschritten
phpsecretary kann nur auf Besserung hoffen
Standard

Zitat:
PHP-Code:
/^(((0,([1-9]d?|d[1-9])|1d?(,d{1,2})?))|20(,0{1,2})?)$/ 
Die "2" wird nicht gematched, sonst siehts aber gut aus...

Hab ich viel zu kompliziert gedacht :-/

Was mich aber eigentlich immer noch nicht weiterbringt, weil ich nen Anwendungsfall eben für oben genannte lookarounds zu finden gehofft hatte.

Vielleicht hat jemand eine Idee, wo man diese sonst verwenden kann und wie sie denn verwendet werden? Evtl. In Kombination mit einem Anwendungsfall mit bedingten Ausdrücken?
__________________
Ich bin Programmierer und kein Frameworkinstallierer.

Geändert von phpsecretary (29.07.2010 um 12:05 Uhr).
phpsecretary 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
Regulärer Ausdruck: Zeichen abziehen? jakez PHP-Fortgeschrittene 6 16.10.2009 00:39
[Erledigt] regulärer Ausdruck für Bibtex Datei hawkeye78 PHP-Fortgeschrittene 8 03.08.2009 15:59
[Erledigt] Regulärer Ausdruck tito PHP Tipps 2009 9 29.07.2009 15:18
[Erledigt] Regulärer Ausdruck - preg_match Felk PHP Tipps 2009 9 24.04.2009 22:09
[Erledigt] regulärer Ausdruck, neg. Lookbehind Felk PHP Tipps 2009 18 08.04.2009 23:48
[Erledigt] regulärer ausdruck: negation einer zeichenkette Asipak PHP Tipps 2009 5 17.03.2009 15:37
Regulärer Ausdruck Andreas PHP Tipps 2009 1 02.03.2009 15:49
[Frage] Regulärer Ausdruck Cout PHP Tipps 2008 3 18.10.2008 21:21
regulärer Ausdruck dobberph PHP-Fortgeschrittene 6 05.08.2008 09:54
Regulärer Ausdruck ruferp PHP Tipps 2007 1 19.06.2007 20:21
Regulärer Ausdruck um <> zu entfernen innerhalb von XM becks123 PHP Tipps 2006 25 16.05.2006 15:06
regulärer ausdruck tomson PHP Tipps 2006 11 03.02.2006 09:58
Regulärer Ausdruck: Ping-Zeiten speichern mAy^daY Server, Hosting und Workstations 9 12.01.2006 19:51
str_replace/ereg_replace regulärer ausdruck gesucht[gelöst] nautiluS PHP Tipps 2005 12 10.05.2005 13:50
Regulärer Ausdruck inu PHP Tipps 2004-2 8 18.11.2004 18:07

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
regulärer ausdruck nur komma, regulärer ausdruck geldbetrag, regulärer ausdruck nur zahlen 0-9 ohne führende null, regulaerer ausdruck geldbetrag mit nachkommastellen, reguläre ausdrücke php zahlen, regulärer ausdruck zahl ohne führende nullen, preg_match \mehrstellig\, reguläre ausdrücke nur komma, php regulär geldbetrag, regulär ausdruck geldbetrag 00 am ende, reguläre ausdrücke suchen bis komma, reguläre ausdrücke zahl größer 1, ereg_replace führende nullen tausender trennzeichen, \lösche führende null\ reguläre ausdrücke php, regulärer ausdruck erste zahl, regulärer ausdruck für nur zahlen und komma, reguläre ausdrücke nur zahlen komma, hinterlässte ein ausdruck einen code, regulärer ausdruck betrag, regulärer ausdruck erstes komma

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:09 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