Laden...

Ergebnisstring gegen vom Benutzer vorgegebenes Muster prüfen - aber nicht RegEx?

Erstellt von MillionsterNutzer vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.318 Views
M
MillionsterNutzer Themenstarter:in
235 Beiträge seit 2005
vor 12 Jahren
Ergebnisstring gegen vom Benutzer vorgegebenes Muster prüfen - aber nicht RegEx?

Hi!

Ich suche nach einer einfachen Möglichkeit einen beliebigen String gegen ein Muster zu prüfen und zu validieren. Normalerweise würde ich hier RegEx nutzen allerdings bin es nicht ich der die Maske festlegen soll sondern ein 'einfacher' Benutzer der zu 99%iger Wahrscheinlichkeit nichts mit RegEx anfangen kann.

Meine erste Idee wäre gewesen den MaskedTextProvider von .Net zu nutzen. Der wäre einfach zu verstehen und würde alle einfachen Sachen abdecken - allerdings musste ich feststellen das dieser einfach nicht für das prüfen von fertigen Strings sondern von Eingaben gemacht ist - zumindest bekomme ich manche Strings damit nicht richtig validiert. 😕

Hat jemand von euch eine Idee wie ich so eine Prüfmaske anwenderfreundlich realisieren kann?

Viele Grüße

Ralf

16.842 Beiträge seit 2008
vor 12 Jahren

Das kommt in meinen Augen nun auf die Komplexität der zu erwartenden Strings an.
Ich benutze so etwas für Dokumente, in dem ich dem Anwender bestimmte Elemente vorgebe; zB #ALPHANUMERISCH# oder #A-Z#.

In der Anwendung selbst ersetze ich diese "Pattern" durch Regex-Elemente.

M
MillionsterNutzer Themenstarter:in
235 Beiträge seit 2005
vor 12 Jahren

Hmm, hab jetzt noch mit nem SQL-Like-statement rumgespielt, welches ich über Umwege hätte nutzen können, aber das bringt mir eigentlich auch nur ein StartsWith, EndsWith und ein Contains.

So wie es aussieht werd ich dem User einen einfachen Vergleich bieten der eben ein Equals, StartsWith, EndsWith und ein Contains machen kann. Zusätzlich dann ein Regexvergleich für die 'PowerUser' - Tutorials gibt's schließlich genug.

Vielleicht hat ja noch jemand eine bessere Idee?

H
116 Beiträge seit 2008
vor 12 Jahren

Vielleicht hat ja noch jemand eine bessere Idee?

Die beste Idee ist, RegEx zu verwenden. Es ist erprobt, weitgehend fehlerfrei und leistungsstark. Dem Kunden kann man auch nur eine Teilmenge der Befehle in die Hilfe schreiben und das Wort RegEx vermeiden. Andererseits solltest Du dem Anwender (sprich Kunden) auch eine (kostenpflichtige) Schulung verpassen können.

Ansonsten gibt es noch die MaskedTextBox aus dem IDE-Baukasten.

Hinrich

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo MillionsterNutzer,

ich würde auch für Regex plädieren. Es ist doch so: einfache Muster sind auch mit Regex einfach. Komplizierte Muster sind auch in einer anderen Syntax kompliziert. Und wie hinrich sagt: Regex ist erprobt, weitgehend fehlerfrei und leistungsstark. Ich möchte noch hinzufügen: anerkannt und verbreitet.

Wenn ich mir die Tabelle der Formatzeichen in MaskedTextBox.Mask-Eigenschaft so anschaue, dann habe ich nicht den Eindruck, dass das für einen Einsteiger übersichtlicher aussieht, als eine Tabelle mit den wichtigsten Regex-Elementen.

Wenn du natürlich noch viele einfachere Format-Vorgaben hast, also z.B. nur 9 für eine Ziffer und A für einen Buchstaben und jedes andere Zeichen für sich selbst steht und auch nichts optional ist, dann ist es für den Benutzer vielleicht einfacher. Aber sowas kannst du ja intern ganz leicht in Regex umsetzen. Im wesentlichen brauchst du ja nur 9 durch \d und A durch \w zu ersetzen. Vorher natürlich noch Regex.Escape aufrufen und nachher noch ein ^ davor und ein $ dahinter setzen.

herbivore

M
MillionsterNutzer Themenstarter:in
235 Beiträge seit 2005
vor 12 Jahren

Hallo hinrich, hallo herbivore,

ich muss euch inzwischen beipflichten und wie bereits gesagt werde ich zweigleisig fahren: In einem ersten Schritt kann der Nutzer nur einen einfachen String angeben und bestimmen ob es ein Equals-, StartWith-, EndWith- oder Contains-vergleich wird.
Später wird dem User auch die Möglichkeit zu RegEx-Vergleichen gegeben - damit kann man dann wirklich alles abprüfen was man will.

Danke für den Input!!!

Ralf