Veröffentlicht 4. November 201113 j Hallo Commy! ich arbeite gerade an einem C# programm. Ich bin anfänger und ein Regex Command funktioniert nicht so, wie er sollte. Ich habe ein Textfeld, in dem man eine IP-Adresse eintragen soll. Das Feld will ich aber nur auf Zahlen und "." (ohne ") beschränken. Folgendes ist bist jetzt mein Code: private void ipTxtBox_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { Regex objNotNumberPattern = new Regex("[0-9]"); if (objNotNumberPattern.IsMatch(e.KeyCode.ToString()) || Char.IsControl((char)e.KeyCode)) { e.SuppressKeyPress = false; } else { e.SuppressKeyPress = true; } } Die Zahlen funktionieren. Laut freund google gibt es das Zeichen "." auch als Metabedeutung. Daraufhin habe ich folgendes geändert: Regex objNotNumberPattern = new Regex("([0-9]\\.)"); Leider funktioniert jetzt gar nix mehr. Ich habe ein PDF Tutorial gelesen welches vieles sehr gut erläutert. Es kommt auch ein fehler, wenn ich nur Regex objNotNumberPattern = new Regex("([0-9]\.)"); (ein backslash) Benutze: Nicht erkannte Escapesequenz Bitte um hilfe!
4. November 201113 j Nimm doch den Punkt aus den Regex raus und prüfe direkt den KeyCode aus den EventArgs.
4. November 201113 j Nimm eine MaskedTextBox und setze TextMaskFormat auf ExcludePromptsAndLiterals. Dann musst du nur schauen das die Werte nicht > 255 sind
4. November 201113 j Dein RegExp ist für die Aufgabe nicht richtig. Dies sagt nämlich aus, dass es nach einer Zahl und einem darauffolgenden Punkt suchen soll. Wenn du aber nur ein einzelnes Zeichen gegen dieses RegExp prüfst, kann er niemals wahr ergeben. Funktionieren sollte folgender RegExp [0-9\\.] Die schließt den Punkt in die Auswahl der Elemente mit ein, damit entsprechend wird aus dem Zahl UND Punkt ein Zahl ODER Punkt. Daraus kannst du dann aber natürlich noch immer nicht schließen, ob die IP Adresse im ganzen syntaktisch richtig ist. Und wenn jemand eine IPv6 Adresse eingeben möchte, kommt er bei dem Textfeld auch nicht sehr weit.
4. November 201113 j Schonmal auf die dumme Idee gekommen: Parse-Methode zu benutzen? Wegen des RAs würde ich an Deiner Stelle besser nochmal googlen. Bearbeitet 4. November 201113 j von lilith2k3
8. November 201113 j Autor Sooo! Tut mir leid wir haben gerade in der Firma sehr sehr viel zu tun. Erstmal vielen vielen Dank für die Antworten. IPv6 fällt erstmal weg, da ich davon sowieso noch keine Ahnung habe . Auf die "dumme" Idee bin ich noch nicht gekommen, da ich sowas überhaupt noch gar nicht kenne! Wie gesagt: anfänger was C# angeht. Die MaskedTextBox werde ich mir mal angucken. @ Dragon8: Das funktioniert - naja sagen wir so - halbwegs^^ Er macht keine Punkte, aber andere sonderzeichen (!"§$%&/()=?^). Ich melde mich wenn ich wieder bisschen mehr Zeit habe. Danke erstmal für alle Antworten!!
11. November 201113 j @ Dragon8: Das funktioniert - naja sagen wir so - halbwegs^^ Er macht keine Punkte, aber andere sonderzeichen (!"§$%&/()=?^). das liegt daran, weil der Ausdruck an sich nur ^[0-9\.]*$ lauten müsste ansonsten würden andere Zeichen nicht ausgeschlossen werden beim Einbauen in den Code musst du darauf achten, dass das \ bei Zeichenketten als Escapezeichen dient deswegen muss du im Code @"^[0-9\.]*$" oder"^[0-9\\.]*$" schreiben
9. Januar 201213 j Du könntest auch den gesamten Inhalt der Textbox nach jeder Eingabe gegen folgende RegExp prüfen: "^([0-9]{1,3}\\.){0,3}([0-9]{0,3})$" Das beinhaltet dann, daß dein User fortlaufen auf eine korrekte IP-Adresse hinarbeitet bei der Eingabe. Bevor du das Endergebnis dann als IP verwendest, solltest du dieses dann nochmal gegen folgende RegExp prüfen: "^([0-9]{1,3}\\.){3}([0-9]{1,3}){1}$" Bearbeitet 9. Januar 201213 j von HuDeanY
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.