[regexp] Preis-String Testen
-
Ach jetzt hab ich das gecheckt wie die Preise sein sollen. Man voll dumm... also da würde folgender RegEx es natürlich tun:
[0-9](\.[0-9]{3}),[0-9]{2}Da ist aber eben nach wie vor das oben beschriebene Problem, und das ist auch nicht so einfach zu lösen. Kommt halt drauf an wie die Preise bei dir im Text vorkommen. Wenn es z.B. so ist, dass die alle alleine in einer Zeile stehen, dann ist folgendes ausreichend:
^[0-9](\.[0-9]{3}),[0-9]{2}$Edit:
Ja an sowas wie bei minhen habe ich auch schon gedacht. Ist aber auch nicht perfekt. Wenn diese Preise z.B. in nem ganz normalen Text mit Sätzen drin vorkommen sollen, dann kann man da auch Probleme kriegen, aber genauso natürlich mit dem \s+.
Wenns nur in ner Zeile stehen sollen dann ist der natürlich auch gut, aber da tuts der jetzt von mir beschriebene RegEX genauso.Nochmal Edit:
Der ist sogar besser, da er nur den Preis zulässt. Bei dem von minhen könnte man z.B. auch sowas wie abc100,45 korrekt durchbringen, was aber wohl nicht gewünscht ist, wenn der Preis da alleine stehen soll.Also hängt halt immer davon ab
-
Ach, ich seh grad, du willst . und , nicht optional haben? Musst es halt entsprechend anpassen. Für mich ist halt 100€ auch ein gültiger Preis.
ähm klar meinte ich das 100 auch eine Option ist. Habe ich vergessen, sorry. (Halt normale Preisangabe, wie es halt üblich ist)
Aber big thx schonmal für die Antworten.
-
Ich hab das Reg von nep jetzt genommen:
^[0-9]+(\.[0-9]{3})*(,[0-9]{2}$)?
Dann ist der Nachkommateil optional und die Tausendertrennung auch. Aber sowas wie: .100.100,12 oder 10.100,12,12 ist nicht möglich.
Danke nochmal an beide.
-
Was ist mit 1.234.567,89 ? Wär doch ein gültiger Preis?
-
DEvent schrieb:
^[0-9]+(\.[0-9]{3})*(,[0-9]{2}$)?
Wenn du die explizite Aufzählung der Ziffern durch die Zeichenklasse "Ziffer" ersetzt, hast du meinen ursprünglichen Ausdruck: \d+(\.\d{3})*(,\d{2})?
Wollt's nur anmerken - denn auch wenn [0-9] auf den ersten Blick klarer aussieht, würde ich dennoch \d bevorzugen. Es ist besser die Klasse zu nehmen, wenn man die Klasse meint (nicht nur weil's Schreibarbeit spart) als die Klasse jedes Mal neu zu "erfinden".
-
THX 1138 schrieb:
Was ist mit 1.234.567,89 ? Wär doch ein gültiger Preis?
Ja klar, wieso nicht?
Wenn du die explizite Aufzählung der Ziffern durch die Zeichenklasse "Ziffer" ersetzt, hast du meinen ursprünglichen Ausdruck: \d+(\.\d{3})*(,\d{2})?
Wollt's nur anmerken - denn auch wenn [0-9] auf den ersten Blick klarer aussieht, würde ich dennoch \d bevorzugen. Es ist besser die Klasse zu nehmen, wenn man die Klasse meint (nicht nur weil's Schreibarbeit spart) als die Klasse jedes Mal neu zu "erfinden".Ja stimmt hast Recht

^\d+(\.\d{3})*(,\d{2}$)?
-
Ähm, um das ^ und $ solltest du dir vielleicht noch Gedanken machen. So erkennst du einen Preis nur am Zeilenanfang. Wenn sich ein Kommateil anschließt, darf der Preis nur alleine in der Zeile vorkommen. Ohne Nachkommastellen dagegen kann direkt folgen was immer will. Sicher dass du das willst? Und um THX 1138-Einfwurf sollte man sich auch Gedanken machen. Aber beide Sachen lassen sich mit den bisher gezeigten Mitteln lösen. Muss man wohl nicht vormachen, oder?

-
minhen schrieb:
Ähm, um das ^ und $ solltest du dir vielleicht noch Gedanken machen. So erkennst du einen Preis nur am Zeilenanfang. Wenn sich ein Kommateil anschließt, darf der Preis nur alleine in der Zeile vorkommen. Ohne Nachkommastellen dagegen kann direkt folgen was immer will. Sicher dass du das willst? Und um THX 1138-Einfwurf sollte man sich auch Gedanken machen. Aber beide Sachen lassen sich mit den bisher gezeigten Mitteln lösen. Muss man wohl nicht vormachen, oder?

Welcher Einwurf? Das kapiere ich grade nicht.
Das mit dem Zeilenanfang/-Ende muss schon so sein, weil das ist nur ein 1-Zeiliges Inputfeld, in das nur der Preis reinkommen darf.
-
Ja da hat minhen schon recht. Du hast da die Klammern hinten falsch gesetzt.
Hier jetzt mal der RegEx, so wie ich vermute dass er richtig sein sollte:
^[0-9]+(\.[0-9]{3})*(,[0-9]{2})?$Nimmt jetzt z.B. auch sowas wie nur 100 oder auch 1.000.000 .
Sollte jetzt also komplett das sein was du suchst.
-
nep schrieb:
Ja da hat minhen schon recht. Du hast da die Klammern hinten falsch gesetzt.
Hier jetzt mal der RegEx, so wie ich vermute dass er richtig sein sollte:
^[0-9]+(\.[0-9]{3})*(,[0-9]{2})?$Nimmt jetzt z.B. auch sowas wie nur 100 oder auch 1.000.000 .
Sollte jetzt also komplett das sein was du suchst.Danke

Ich habs ein wenig geändert, damit auch 1.000,1 möglich ist (also nur 1 Stelle nach dem Komma).
^\d+(\.\d{3})*(,\d{1,2})?$
Wenn man die Klasse \d benutzt, dann kann man sich doch etliche [] sparen.
-
Ja das stimmt schon, aber ich habs extra nochmal mit den Klammern geschrieben, da es so vielleicht für manche besser ersichtlich ist was das Teil tut.