Mit regex auf Zahlen und Komma prüfen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ossi047
User
Beiträge: 46
Registriert: Donnerstag 19. Dezember 2019, 15:57

Hallo,
ich komm da nicht drauf. Ich möchte die Eingabe von Mengen (String wird später auf Zahl geändert) auf Zahlen prüfen und nach dem Komma sollten nur 2 Stellen möglich sein. Max. Zahlengröße 9 Stellen dann zwei Kommastellen. Ich lese da schon 2 Tage im Internet auf den regex Seiten herum komme aber nicht drauf wie ich das lösen könnte.
Ich hab da schon was gefunden, was da auf Zahlen prüft, aber nicht auf zwei Kommastellen.

txt = "123,45"
if re.match("\d+(\,\d\d)", txt):
print("true")
else:
print("false")


Nachsehendes habe ich auch schon gehabt aber das funktioniert auch nicht so wie vorhin beschrieben.
if re.match("^/[0-9]+$/{3,}", txt)

Könnt Ihr mir bitte da helfen. Danke im Voraus.
Sirius3
User
Beiträge: 17828
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum denkst Du, dass Dein (erster) regulärer Ausdruck nicht funktioniert?
Benutzeravatar
__blackjack__
User
Beiträge: 13242
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wahrscheinlich will man hier eher `fullmatch()` statt nur `match()`.
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
ossi047
User
Beiträge: 46
Registriert: Donnerstag 19. Dezember 2019, 15:57

Mit 'fullmatch' funktionieren die zwei Kommastellen habe ich getestet.

txt = "123,45"
if re.fullmatch("\d+(\,\d\d)", txt):
print("true")
else:
print("false")

Die Eingrenzung auf zwei Nachkommastellen habe ich auch geschafft.
if re.fullmatch("\d+(\,\d\d){0,3}", txt):

Jetzt fehlt mir nur noch die max. 9 Stellen vor dem Komma. Bitte um weitere Hinweise. Danke vielmals.
ossi047
User
Beiträge: 46
Registriert: Donnerstag 19. Dezember 2019, 15:57

Hallo Spezialisten,
ich glaube ich habe ein Lösung gefunden. So sollte es funktionieren:
txt = "0,30"
if re.fullmatch("^\d{1,7}(,\d{2}){1,3}",txt):
print("true")
else:
print("false")

Wenn ihr anderer Meinung seit bitte um Info und Danke für euer Interesse und Hilfe.
narpfel
User
Beiträge: 646
Registriert: Freitag 20. Oktober 2017, 16:10

@ossi047: Probier deinen RegEx mal mit "1,23,45" aus.
Sirius3
User
Beiträge: 17828
Registriert: Sonntag 21. Oktober 2012, 17:20

Bei einem fullmatch braucht es kein ^. Warum bis zu drei Kommas?
ossi047
User
Beiträge: 46
Registriert: Donnerstag 19. Dezember 2019, 15:57

Hallo Sirius3 danke das ^ habe ich rausgenommen. Letzter Stand: re.fullmatch("\d{1,7}(,\d{2})",txt)
7 Stellen vor Komma, 2 Stellen nach Komma wird auf Zahlen geprüft.

Frage: Wie kann ich diese Kontrolleingaben für mehrere Entryfelder verwenden?
Mit bindall hab ichs versuchst habe ich nicht geschaft.
Antworten