Keine Sonderzeichen in der Textbox außer .-

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Keine Sonderzeichen in der Textbox außer .-

    Hallo Community,

    Ich möchte Prüfen, ob in einer TextBox Sonderzeichen sind. Ausgenommen sollen sein: "." "-" "ÄÖÜ"

    Habe versucht von der anderen Richtung dran zu gehen: a-z und A-Z und ÄÖÜ , . sind erlaubt.

    Mein kläglicher versuch:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. If Not Nachnamen Like "[a-zA-Z,-.]" Then
    2. ErrorText = "Es drfen keine Sonderzeichen im Namen sein!"
    3. Return False
    4. End If


    Return true kann ignoriert werden

    Wie geht's richtig?


    Danke Jacky
    Versteh nicht wie ich das bei mir einbauen muss damit es funktioniert. Versteh es allgemein nicht. das Tutorial verwirrt mich: muss ich erst eine neue Klasse erzeugen mit den Sonderzeichen, die ich raus filtern will?

    Mir wäre schon etwas geholfen wenn ich sagen könnte: erlaube nur Groß- & Kleinbuchstaben

    Jacky1804 schrieb:

    sind erlaubt.
    Dieser Code erlaubt die tasten a - z, modifiziere ihn, wie Du ihn brauchst:

    VB.NET-Quellcode

    1. Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown
    2. Select Case e.KeyCode
    3. Case Keys.A To Keys.Z
    4. ' nix tun
    5. Case Else
    6. e.SuppressKeyPress = True
    7. End Select
    8. End Sub

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hey Jacky,

    VB.NET-Quellcode

    1. Module MeineHelfer
    2. 'Nicht erlaubte Zeichen sind,...
    3. Public NichtErlaubteZeichen As String = "ÄÖÜäöü.-"
    4. Public Sub UeberpruefeZeichen(ByRef txtBox As TextBox)
    5. Dim iStartIndex As Integer = txtBox.SelectionStart
    6. Dim iAbziehen As Integer
    7. Dim sAktText As String = txtBox.Text
    8. Dim sZeichen As String
    9. For x As Integer = 0 To txtBox.Text.Length - 1
    10. 'Wir beginnen immer bei dem nächsten Element, da wir diesen ja überprüfen wollen (Eingabe)
    11. sZeichen = txtBox.Text.Substring(x, 1)
    12. 'Wenn dieses, vom Nutzer eingegeben Zeichen in unserem
    13. 'NichtErlaubteZeichen' - String drin ist, dann
    14. If NichtErlaubteZeichen.Contains(sZeichen) Then
    15. 'Ersetzen wir dieses Zeichen mit einem leeren Feld, bzw. nichts
    16. sAktText = sAktText.Replace(sZeichen, String.Empty)
    17. 'Diese Variable setzen wir um.. siehe unten, letzte Zeile
    18. iAbziehen = 1
    19. 'Den Nutzer wissen lassen das er keine Chance hat ;)
    20. '..bzw. dass er einen Eingabefehler getan hat
    21. Beep()
    22. End If
    23. Next
    24. 'Jetzt nur noch den text einfügen...
    25. txtBox.Text = sAktText
    26. 'Und hier anschließend die Position unseres Cursors verschieben,
    27. 'damit der User nichts merkt und weiterschreiben kann.
    28. txtBox.Select(iStartIndex - iAbziehen, 0)
    29. End Sub
    30. End Module


    Das sollte dir weiterhelfen können. Du musst die Methode "UeberpruefeZeichen" aufrufen und dein TextBox Control übergeben. (Du kannst das auch mit anderen Controls machen, controls welche die .Text Methode beinhalten (richtextbox, combobox...) musst halt nur die jeweilige Stelle anpassen [ByRef ctrl As DeinControl]

    @RodFromGermany
    Geht das so? Ich hab mir da vor kurzem was gebaut, weil mir das Abfragen auf die nerven ging ^^

    Grüße,
    Drahuverar
    Option Strict On!

    Drahuverar schrieb:

    Geht das so?
    Getestet.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Erst mal danke an euch.

    Einfach den Code zu übernehmen würde mir nicht viel bringen, auch wenn ich ihn verstanden habe.

    Das habe ich gestern gebastelt um Buchstaben zu erlauben.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. If Not Nachnamen Like "[A-Z]" Then
    2. ErrorText = "Es drfen keine Sonderzeichen im Namen sein!"
    3. Return False
    4. End If


    Allerdings funktioniert das nicht ;(
    Wie muss ich die like Funktion verändern?
    In der "internen" online Hilfe steht es wie folgt:

    charlist kann einen Zeichenbereich angeben, wenn
    Sie die Ober- und Untergrenze des Bereichs mit einem Bindestrich (–) trennen. Beispielsweise ergibt [A–Z] eine Übereinstimmung, falls die entsprechende
    Zeichenposition in string beliebige Großbuchstaben
    im Bereich A – Z enthält.

    Wenn OptionCompareText
    aktiviert ist, findet der Bereich [A–E]
    Übereinstimmungen mit A, a,
    À, à, B,
    b, C, c,
    D, d, E
    und e.


    OptionCompareText habe ich aktiv.


    Danke für eure Hilfe
    Sorry okay

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Function CheckNachname(ByVal Nachnamen As String, ByRef ErrorText As String) As Boolean
    2. If Nachnamen = "" Then
    3. ErrorText = "Sie mssen Ihren Namen eingeben!"
    4. Return False
    5. End If
    6. If Not Nachnamen Like "[A-Z]" Then
    7. ErrorText = "Es drfen keine Sonderzeichen im Namen sein!"
    8. Return False
    9. End If
    10. If Nachnamen.Length < 2 Then
    11. ErrorText = "Dein Nachname ist zu kurz!"
    12. Return False
    13. End If
    14. If Nachnamen.Length > 692 Then
    15. ErrorText = "Dein Name ist zu lang!"
    16. Return False
    17. End If
    18. Return True
    19. End Function
    Ich glaube du solltest das komplett überdenken/anders angehen. Das kann so nicht gehen.

    Zwischenfrage:
    Muss es mit 'Like' gehen? Habe noch nie damit gearbeitet.

    Jedenfalls solltest du deine Funktion überdenken. Du willst einen 'ErrorText' übergeben?
    Diesen setzt du doch erst in deiner Funktion..
    Außerdem gibt deine Funktion immer True zurück, wenn keine Bedingung erfüllt wird?
    Wenn Bedingung erfüllt dann True, ansonsten False. Weil wo nix ist, ist nix. Und wenn True dann mach halt,.. (weiter)




    Option Strict On!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Drahuverar“ ()

    ja leider;(

    Also CheckName soll eine positive Funktion sein, also wenn alles richtig dann true. Die Bedingungen fragen ja nach Fehlern, also wenn Bedingung erfüllt ist die Prüfung nicht bestanden also false.
    Naja ein wenig kompliziert, aber ich soll das so machen.
    Ja den Errortext soll ich übergeben.

    Die Aufgabe lautete aus dem schon geschriebenen Projekt eine allgemein gültige Klasse zu machen.
    Also diese Klasse soll quasi für alle Art Formulare benutzbar sein.

    Ich hoffe das ist irgendwie verständlich

    Jacky1804 schrieb:

    schon geschriebenen Projekt eine allgemein gültige Klasse zu machen
    Projekt zu Klasse? Wie das?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    in Alles über Events ist eine allgemeine Lösung zur Beschränkung von Text-Inputs enthalten.

    Die Lösung muss übrigens für Textboxen anders aussehen als für Richtextboxen.

    Dort gibts genau eine Zeile, die die Gültigkeit einer Eingabe überprüft.
    Diese Zeile kann man logischerweise durch beliebige andere Prüfungen austauschen.

    Und das Teil ist auch sicher gegen Einfügungen via Copy&Paste, oder per Contextmenü.

    Jacky1804 schrieb:

    Ja den Errortext soll ich übergeben.

    Klar sollst du das, aber nicht an deine Funktion ^^ Deine Funktion sollte den bestimmt zurückgeben ^^


    Bin immer noch der Meinung das dir das hier helfen sollte.
    Aber vielleicht kommst du noch auf die Lösung/Idee wenn du EDRs Thread gelesen hast..
    Danach hatte ich mir meins gebastelt..
    Option Strict On!
    ich muss nur noch irgendwie ein Bindestrich erlauben dann hab ich alles was ich möchte.

    @ErfinderDesRades
    Die fertige Lösung habe ich leider nicht gefunden.

    @Drahuverar
    das hat mir schon ein bisschen geholfen, aber die Zeichen "[A-Za-zäöüÄÖÜ.-] sollen erlaubt sein alle anderen nicht ;(
    das ging aus meiner Beschreibung nicht so genau hervor.

    Ich hab es jetzt auch mit einer Schleife (fast) gelöst Probleme macht halt nur der Bindestrich ;(

    Mein Ansatz:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. For i As Integer = 0 To Vornamen.Length - 1
    2. If Not Vornamen.Chars(i) Like ("[a-zA-Z.]") Then
    3. ErrorText = "Es drfen keine Sonderzeichen im Vornamen sein!"
    4. Return False
    5. End If
    6. Next

    @Jacky1804
    Ist doch ganz einfach, wenn du willst das nur "[A-Za-zäöüÄÖÜ.-]" erlaubt ist, dann musst du meins umfunktionieren, oder halt den String ergänzen und alles andere aufzählen.

    VB.NET-Quellcode

    1. ​Dim DisAllowed as String = ",+*/!§$%&/()=?`@€²³{[]}\~#;:_" 'Halt nicht erlaubt


    Für das was ich es bisher benötigt habe reicht es. Ansonsten kann man hingehen und explizit vorgehen,.. Überladene Methoden vielleicht..
    Option Strict On!