PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Regular Expressions



ramonl
11-01-2005, 09:54
Hi,

ich habe ein Problem bei Regular Expressions mit dem QValidator.

Z.B. nur Zahlen durchlassen oder so ist ja kein Problem (
QRegExp rx("[0-9]{0,8}");), aber wie kann ich ihm zB. explizit sagen, dass bestimmte Zeichen zB. + oder - zugelassen sind ?
Auch habe ich nicht gefunden, dass die Eingabe z.B. aus mehreren Blöcken bestehen kann, wie z.B. bei einem Name oder so. Sprich 2, 3 oder mehr Wörter oder Zahlen.

Noch ein weiteres Problem ist, wenn ich mit festen Längen arbeiten will.
Ich frage nämlich die Textfelder immer bei jeder Veränderung, also jeder neuen Eingabe ab, so dass bei vorgegebener fester Länge er ja sofort bei jeglicher Eingabe schreit, da diese ja logischerweise immer unter der festen Länge liegt. Wie kann man denn das unterbinden?

Danke im Voraus für Eure Hilfe

BlueJay
11-01-2005, 11:24
Hm, da war ich in dem anderen Thread wohl wirklich zu knapp.



aber wie kann ich ihm zB. explizit sagen, dass bestimmte Zeichen zB. + oder - zugelassen sind ?

Auch habe ich nicht gefunden, dass die Eingabe z.B. aus mehreren Blöcken bestehen kann, wie z.B. bei einem Name oder so. Sprich 2, 3 oder mehr Wörter oder Zahlen.


Nochmal für alle F(a)elle:

Eierlegende Wollmilchsau für Zahlen:
QValidator* intvalidator=new QIntValidator(-15,999,this); // Zahlen von -15 bis 999

Eierlegende Wollmilchsau für einfache Texte mit Umlauten, Zifffern, Leer- und Satzzeichen:
QValidator* strvalidator=new QRegExpValidator(QRegExp("[\\s\\w .!?,:=+-*'/]{1,31}"),0);
// Semikolon fehlt, da das Programm CSV-Dateien verarbeitet :)

Einhängen in die QLineEdits:
p_text[1]->setValidator(intvalidator);
p_text[2]->setValidator(intvalidator);
p_text[0]->setValidator(strvalidator);

Ende des Eingabe (-und Testteils)!




Noch ein weiteres Problem ist, wenn ich mit festen Längen arbeiten will.
Ich frage nämlich die Textfelder immer bei jeder Veränderung, also jeder neuen Eingabe ab, so dass bei vorgegebener fester Länge er ja sofort bei jeglicher Eingabe schreit, da diese ja logischerweise immer unter der festen Länge liegt. Wie kann man denn das unterbinden?


Mann, mach dir das Leben nicht so schwer!. QLineEdit nimmt dir doch die ganze Arbeit ab, leise und unauffällig. :)

Und abgefragt wird hier erst, wenn der String wirklich gebraucht wird.

so long,

ramonl
11-01-2005, 12:03
ok, danke erstmal für Deine Antwort.


Mann, mach dir das Leben nicht so schwer!. QLineEdit nimmt dir doch die ganze Arbeit ab, leise und unauffällig.

Und abgefragt wird hier erst, wenn der String wirklich gebraucht wird.


Was meinst Du hiermit ? Ich benutze ja einen QLineEdit, aber wie wird mir denn da die Arbeit abgenommen.

Und was ist, wenn ich z.B. einen Geldbetrag eingeben möchte. Dass ich also via Prüfunung sicher stellen will, dass der Betrag mit einem Komma sein MUSS.
Bei deinem Beispiel war ja, welche Zeichen vorkommen dürfen, oder ? Aber nicht muss.

Die InputMask im Designer ist ja wohl garnicht zu gebrauchen.

Danke im Voraus

burst
11-01-2005, 13:11
mitn validator ueberpruefst du nicht so sachen wie zum beispiel ob ein komma vorhanden ist, denn der eintrag wird ja noch bearbeitet. du gibst nur an dass du kommas schreiben kannst. wird dann der eintrag verwendet, also zb. wenn der user ok klickt und irgendwas passiert oder so, dann kannst du ueberpruefen ob ein komma vorhanden ist zb. mit [0-9]*,[0-9]*

ramonl
11-01-2005, 16:05
so ganz verstehe ich das immernoch nicht.

also [0-9]*, bewirkt ja da szahlen und komams erlaubt sind...

Wissen muss ich aber noch welches zeichen für ein Leerzeichen steht !?


(also ich brauche genau buchstaben und leerzeichen erlaubt, z.b. für vorname, leerzeichen, nachname)

burst
11-01-2005, 21:51
das zweite was ich angegeben habe ([0-9]*,[0-9]*) ist keine re fuer den validator sondern zum nachtraeglichen ueberpruefen des strings. die re gibt in worten ausgedrueckt an: der string ist "richtig" wenn eine beliebige anzahl von ziffern, gefolgt von genau einem komma, gefolgt von einer beliebigen anzahl von ziffern vorhanden ist. dh. genau ein komma muss vorhanden sein. besser waere sogar ^[0-9]+,[0-9]+$

die qt leute koennen mir ja sagen wenn ich dreck erzaehle, ich teile nur das mit was ich von perl kenne :).

leerzeichen ist leerzeichen, zumindest in perl res.

BlueJay
12-01-2005, 00:23
(also ich brauche genau buchstaben und leerzeichen erlaubt, z.b. für vorname, leerzeichen, nachname)

Mit \w+\s\w+ dürftest du beim Validator dabei sein,
(die Backslashes im rxp-String latürnich maskieren :) )

mit z.B. eingabe.section(' ',x,x) beim restlichen Testen vor Abspeichern.

so long