Seite 1 von 1
Eingabeüberprüfung mit Regular Expressions
Verfasst: 22. April 2008 09:27
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
Re: Eingabeüberprüfung mit Regular Expressions
Verfasst: 22. April 2008 10:13
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
Verfasst: 22. April 2008 12:20
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)));
}
Verfasst: 22. April 2008 12:33
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
Verfasst: 22. April 2008 13:17
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

Verfasst: 22. April 2008 15:37
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 