Eingabeüberprüfung mit Regular Expressions

Alles rund um die Programmierung mit Qt
Antworten
LordBernhard
Beiträge: 15
Registriert: 3. Februar 2008 15:40

Eingabeüberprüfung mit Regular Expressions

Beitrag von LordBernhard »

Hallo!

Ich habe ein problem mit einer Eingabeüberprüfung:

wie überprüfe ich einen String auf diese Fälle mit einer expression?

1-3stelligeZahl
1-3stelligeZahl/1-3stelligeZahl/usw

ich habe es hiermit probiert:

"(\\d{1,3}\\b(/)\\b{0,1}){0,}";

aber das funktioniert nicht so wie es soll -.-

Und zur Überprüfung selbst nehme ich an verwendet man am besten Wildcards suche mit exactMatch?

Ich hoffe ihr könnt mir helfen

Mfg, Bernhard
honda71
Beiträge: 49
Registriert: 12. Juli 2006 16:16

Re: Eingabeüberprüfung mit Regular Expressions

Beitrag von honda71 »

LordBernhard hat geschrieben:Hallo!

Ich habe ein problem mit einer Eingabeüberprüfung:

wie überprüfe ich einen String auf diese Fälle mit einer expression?

1-3stelligeZahl
1-3stelligeZahl/1-3stelligeZahl/usw

ich habe es hiermit probiert:

"(\\d{1,3}\\b(/)\\b{0,1}){0,}";

aber das funktioniert nicht so wie es soll -.-

Und zur Überprüfung selbst nehme ich an verwendet man am besten Wildcards suche mit exactMatch?

Ich hoffe ihr könnt mir helfen

Mfg, Bernhard
Hallo Bernhard,

so sieht die Abfrage aus:

"\\d{1,3}(/\\d{1,3})*"

\\d{1,3} => es wird einmal nach 1-3 Ziffern gesucht
(/\\d{1,3})* => beliebig oft (oder auch keinmal!) kann ein "/" und 1-3 Ziffern folgen...

That's it!

Gruß

Oli
LordBernhard
Beiträge: 15
Registriert: 3. Februar 2008 15:40

Beitrag von LordBernhard »

Erstmal vielen dank für deine Antwort!!

jedoch habe ich hiermit noch ein paar probleme.. z.B. kommt bei 10/asdf 0 zurück... obwohl es eig. falsch sein sollte.. vielleicht übersteigen meine Erwartungen auch die Fähigkeiten von QRegexp .. aber ich möchte überprüfen, ob der komplette String korrekt ist nach diesen regeln.

So stelle ich mir das vor.. ich brauche allerdings später noch eine Begrenzung, wie oft so eine Folge vorkommen darf.

Code: Alles auswählen

QString reg = "\\d{1,3}(/\\d{1,3})*";
QRegExp rx(reg);
QStringList temp;
temp<<"40";			//richtig
temp<<"40/";			//falsch
temp<<"40/60";			//richtig
temp<<"";			//falsch
temp<<"/";			//falsch
temp<<"20/30/50";		//richtig
temp<<"-20/30";		//falsch (negativ)
temp<<"10/asdf";		//falsch (buchstaben)

for(int i=0;i<temp.size();i++)
{
	qDebug()<<QString::number(rx.indexIn(temp.at(i)));
}
honda71
Beiträge: 49
Registriert: 12. Juli 2006 16:16

Beitrag von honda71 »

Hi Bernhard,

nimm die Funktion exactMatch. Dann passt das Ergebnis:

qDebug()<< temp.at(i) + (rx.exactMatch(temp.at(i))?":ja":":nein");

Ergebnis:
40:ja
40/:nein
40/60:ja
:nein
/:nein
20/30/50:ja
-20/30:nein
10/asdf:nein

Gruß

Oli
LordBernhard
Beiträge: 15
Registriert: 3. Februar 2008 15:40

Beitrag von LordBernhard »

vielen Dank!

Ich hatte es zwar mit exactMatch versucht, aber vorher noch WildCards eingestellt.. das war der Fehler... naja.. auf jedenfall nochmals danke :D
M.L.
Beiträge: 9
Registriert: 22. Februar 2008 10:29

Beitrag von M.L. »

das war der Fehler
Damit so etwas beim nächsten Mal nach Möglichkeit vermieden wird, kann man u.a. den Regex Tester unterstützend verwenden: http://www.regex-tester.de/regex.html ;-)
Antworten