none
Regex - Leerzeicheneingabe nicht zulassen RRS feed

  • Frage

  • Hallo,

    ich möchte bei einer Eingabe in eine Textbox die Eingabe von Leerzeichen verhindern.

    Probiert habe ich es mit dem PreviewTextInput-Event und folgendem Code:

    Dim re As New System.Text.RegularExpressions.Regex("^[.][0-9]+$|^[0-9]*[.]{0,1}[0-9]*$")

    Wie kann ich jetzt die Eingabe von Leerzeichen verhindern?

    Selbst mit Regex("^[^\s]+$) lassen sich Leerzeichen einfügen.

    Dirk

    Samstag, 8. Dezember 2012 13:05

Antworten

  • Hallo,

    Musst du es mit Regex machen? Du köntest ja einfach mit e.Text.Contains(" ") gucken ob ein Leerzeichen in der änderung enthalten ist.

    Wenn ich auf regexpal.com gucke, dann funktioniert ^[^\s]+$. Das deutet für mich darauf hin, das bei eingabe eins Leerzeichens PreviewTextInput nicht ausgelöst wird. Ich benutzte folgenden Code:

    Private Sub TextBox_PreviewTextInput_1(sender As Object, e As TextCompositionEventArgs)
    	Dim b1 As Boolean = Regex.IsMatch(DirectCast(sender, TextBox).Text, "^[^\s]+$")
    End Sub
    
    Private Sub TextBox_TextChanged_1(sender As Object, e As TextChangedEventArgs)
    	Dim b2 As Boolean = Regex.IsMatch(DirectCast(sender, TextBox).Text, "^[^\s]+$")
    End Sub
    

    In einer WPF Anwendung und b2 ergab mit enthaltenem Leerzeichen False, b1 immer True.

    An sich wäre es vlt. sowieso besser TextChanged zu benutzen, wenn du den Text vom Programm aus aktualisierst bzw. eine Datenbindung benutzt. Dann könnte sich schnell ein Leerzeichen einschleichen. In TextChanged gibts natürlich kein e.Handled, dann müsstest du alles "von Hand" auskorigieren. Alternativ, wahrscheinlich noch ein Stückchen besser es mit einzubinden, ist PreviewKeyDown, um nicht erlaubte Tasten von Anfang an zu blocken. (beachte auch Tab, Enter, Zurück, Entfernen usw., die du natürlich auch erlauben musst.)


    Koopakiller [kuːpakɪllɐ] http://koopakiller.ko.ohost.de/

    • Als Antwort markiert Dirk2006 Samstag, 8. Dezember 2012 15:14
    Samstag, 8. Dezember 2012 13:27
    Moderator

Alle Antworten

  • Hallo,

    Musst du es mit Regex machen? Du köntest ja einfach mit e.Text.Contains(" ") gucken ob ein Leerzeichen in der änderung enthalten ist.

    Wenn ich auf regexpal.com gucke, dann funktioniert ^[^\s]+$. Das deutet für mich darauf hin, das bei eingabe eins Leerzeichens PreviewTextInput nicht ausgelöst wird. Ich benutzte folgenden Code:

    Private Sub TextBox_PreviewTextInput_1(sender As Object, e As TextCompositionEventArgs)
    	Dim b1 As Boolean = Regex.IsMatch(DirectCast(sender, TextBox).Text, "^[^\s]+$")
    End Sub
    
    Private Sub TextBox_TextChanged_1(sender As Object, e As TextChangedEventArgs)
    	Dim b2 As Boolean = Regex.IsMatch(DirectCast(sender, TextBox).Text, "^[^\s]+$")
    End Sub
    

    In einer WPF Anwendung und b2 ergab mit enthaltenem Leerzeichen False, b1 immer True.

    An sich wäre es vlt. sowieso besser TextChanged zu benutzen, wenn du den Text vom Programm aus aktualisierst bzw. eine Datenbindung benutzt. Dann könnte sich schnell ein Leerzeichen einschleichen. In TextChanged gibts natürlich kein e.Handled, dann müsstest du alles "von Hand" auskorigieren. Alternativ, wahrscheinlich noch ein Stückchen besser es mit einzubinden, ist PreviewKeyDown, um nicht erlaubte Tasten von Anfang an zu blocken. (beachte auch Tab, Enter, Zurück, Entfernen usw., die du natürlich auch erlauben musst.)


    Koopakiller [kuːpakɪllɐ] http://koopakiller.ko.ohost.de/

    • Als Antwort markiert Dirk2006 Samstag, 8. Dezember 2012 15:14
    Samstag, 8. Dezember 2012 13:27
    Moderator
  • Vielen Dank für Deine schnelle Hilfe.....werde es mit TextChanged machen....
    Samstag, 8. Dezember 2012 15:14