Immer diese Regex - Lösung gesucht

  • VB.NET
  • .NET 4.5

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Plexian.

    Immer diese Regex - Lösung gesucht

    Hallo zusammen,

    ich bin noch relativ Neu. Zum einen hier im Forum, zum anderen was VB angeht.
    Ich habe ein kleines Problem.
    Und zwar soll in einem Eingabefeld 0-9 sowie N und E erlaubt sein.
    Die Ziffern sind kein Problem. Doch sobald ich \N oder \E einfüge, heißt es dass es nicht geht wegen dem "Return" oder "Escape" Befehl.
    Wie kann ich das jetzt umgehen?

    Im Grunde sieht es derzeit so aus.....

    Quellcode

    1. If Not Regex.Match(TextBox1.Text, "^[N\E\0-9]*$", RegexOptions.IgnoreCase).Success Then 'Only Letters



    Danke jetzt schonmal
    Hallo!

    Über das KeyPress Event kannst du relativ leicht die Eingabe blockieren.

    C#-Quellcode

    1. Regex regex = new Regex(@"[0-9NEne]");
    2. MatchCollection matches = regex.Matches(e.KeyChar.ToString());
    3. // Löschen muss noch Möglich sein
    4. if (matches.Count != 1 && e.KeyChar != Convert.ToInt16(Keys.Back))
    5. e.Handled = true;


    Beachte aber, dass ggf. noch Text via Copy und Paste eingefügt werden könnte. Daher wäre es noch Ratsam das Textchange Event zu abonnieren.

    LG
    Ich habe jetzt, für meine Verhältnisse, einfachere Lösung des Problems...

    Quellcode

    1. ​If Not Regex.Match(TextBox1.Text, "^[N\\E\0-9]*$", RegexOptions.IgnoreCase).Success Then 'Only Letters


    vor dem E kommt ein weiterer Backslash und es funktioniert.

    Danke
    Damit erlaubst du erstens Backslashes in deiner TextBox und zweitens weiß ich ehrlich gesagt nicht ob die 0 gematcht wird.
    @MarvinKleinMusics Lösung ist schon richtig so, zumindest das Pattern kannst du direkt übernehmen.

    Beachte ggf. regex101.com/ für die Zukunft.

    EDIT: Korrektur, die 0 wird gematcht, \0-9 sorgt dafür, dass du alle ASCII Zeichen von 0 bis 57 (Wert der 9) matcht - das willst du definitiv nicht.