Seite 1 von 1

Regex für Währung

Verfasst: Sonntag 26. März 2017, 13:27
von nieselfriem
Hallo zusammen,

ich möchte in einem QT-Eingabefeld die Währungseingabe so steuern, dass nur ein richtiges Format eingeben werden kann. Dazu habe ich ein Regex geschrieben.

Es sollen Werte erlaubt sein wie 3454 oder 34,5 oder 45.4 oder 45,00 oder 45.00

Mein Problem ist aktuell, dass auch eingaben wie 34,,,,,.... erlaubt sind.
Dazu mal mein regex:

Code: Alles auswählen

\d+(\,|\.)?\d{0,2}
Dabei dachte ich, ich habe die Eingabe von , oder . mit

Code: Alles auswählen

(\,|\.)?
auf 0 bis max 1 limitiert. Was mach ich hier falsch?

VG niesel

Re: Regex für Währung

Verfasst: Sonntag 26. März 2017, 14:10
von __deets__
Dir fehlen Anfangs- und Ende-Marker:

Code: Alles auswählen

deets@paleale MINGW64 ~/projects/GH28/video-player (master)
$ py36
Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 07:18:10) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> rex = re.compile(r"\d+(\,|\.)?\d{0,2}")
>>> rex.match("10.0")
<_sre.SRE_Match object; span=(0, 4), match='10.0'>
>>> rex.match("10.....")
<_sre.SRE_Match object; span=(0, 3), match='10.'>
>>> rex = re.compile(r"^\d+(\,|\.)?\d{0,2}$")
>>> rex.match("10.....")
>>> rex.match("10.")
<_sre.SRE_Match object; span=(0, 3), match='10.'>

Re: Regex für Währung

Verfasst: Sonntag 26. März 2017, 14:42
von nieselfriem
Hi!

trotz der Begrenzer kann ich es leider noch wie oben geschrieben eingeben.

Code: Alles auswählen

validator = QRegExpValidator(QRegExp("^\d+(\,|\.)?\d{0,2}$"), editor)
VG niesel

Re: Regex für Währung

Verfasst: Sonntag 26. März 2017, 15:10
von __deets__
Dann ist das wohl eher eine Frage fuer die Qt-Foren ;)

Re: Regex für Währung

Verfasst: Montag 27. März 2017, 09:43
von Zizibee
Wie __deets__ ja schon schrieb, scheint das kein Problem deines Regulären Ausdrucks zu sein. Zumindest funktioniert der in einem kleinen Beispiel recht zuverlässig:

[codebox=pycon file=Unbenannt.txt]
import re

input_list = ["42", "42,67", "42.67", "42,6", "42..67", "42,,676"]
for element in input_list:
x = re.search("^\d+(\,|\.)?\d{0,2}$", element)
print (x)
[/code]

Ausgabe:
[codebox=pycon file=Unbenannt.txt]
<_sre.SRE_Match object; span=(0, 2), match='42'>
<_sre.SRE_Match object; span=(0, 5), match='42,67'>
<_sre.SRE_Match object; span=(0, 5), match='42.67'>
<_sre.SRE_Match object; span=(0, 4), match='42,6'>
None
None
[/code]

Grüße

Re: Regex für Währung

Verfasst: Dienstag 28. März 2017, 14:04
von sebastian0202
Hallo, ich kann das Problem nicht nachvollziehen.
Folgender Quellcode funktioniert mit deinem RegExp einwandfrei.

Python 3.5 und PyQT5

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

class RegExpTest(QWidget):
    Width = 270
    Height = 65
    
    def __init__(self):
        super(RegExpTest, self).__init__()
        layout = QVBoxLayout(self)
        
        self.edit = QLineEdit()
        regex = QRegExp("\d+(\,|\.)?\d{0,2}")
        validator = QRegExpValidator(regex)
        self.edit.setValidator(validator)

        layout.addWidget(self.edit)

        self.setGeometry(55, 55, RegExpTest.Width, RegExpTest.Height)
        self.setWindowTitle('RegExpTest')
        self.show()

def main():
    app = QApplication(sys.argv)
    qlineedit_regexptest = RegExpTest()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()