Sonderzeichen in Inputboxen nicht erlauben

  • Hi.

    Gibt es bei Inputboxen die Möglichkeit Sonderzeichen nicht zu erlauben.
    Wenn z.B. ein User in der FileCreate Inputbox Sonderzeichen wie &%$§... nutzt, wird die Datei ja nicht erstellt.
    Dies würde ich gerne bei Eingabe des Users schon eliminieren ala " M8" (Muss eingegeben werden aber maximal 8 Zeichen...).

    Grüße Björn

  • Hmm, das ist schade.
    Eine Inputbox sollte es schon sein.
    Im Forum hatte ich natürlich vorher schon gesucht aber nciht mit Inputboxen gefunden...

    Evtl. hat ja noch jemand eine Idee ausser char für char zu schauen ob zwischen ASCII 48-57 oder 65-90

    Grüße
    Björn

    • Offizieller Beitrag

    Mit Hilfe der Timer-UDF kann man auch den normalen FileSaveDialog benutzen, um Fehleingaben rauszufiltern:

    Spoiler anzeigen
    [autoit]


    #include <Timers.au3>
    Global $hGUI = GUICreate("Test", 600, 400)

    [/autoit] [autoit][/autoit] [autoit]

    Global $sTitle = "Bitte Datei zum speichern wählen..."

    [/autoit] [autoit][/autoit] [autoit]

    _Timer_SetTimer($hGUI, 100, "_CheckInput")
    Global $sFilename = FileSaveDialog($sTitle, @MyDocumentsDir, "Scripts (*.aut;*.au3)", 2)
    _Timer_KillAllTimers($hGUI)
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func _CheckInput($hWnd, $Msg, $iIDTimer, $dwTime)
    #forceref $hWnd, $Msg, $iIDTimer, $dwTime
    Local $sPattern = "[^a-zA-Z 0-9]" ; <- das sind die erlaubten Zeichen, alle anderen werden entfernt
    Local $sInput = ControlGetText($sTitle, "", "[CLASS:Edit; INSTANCE:1]")
    If StringRegExp($sInput, $sPattern) Then
    _PlayDefaultSystemSound("SystemHand")
    $sInput = StringRegExpReplace($sInput, $sPattern, "")
    ControlSetText($sTitle, "", "[CLASS:Edit; INSTANCE:1]", $sInput, 1)
    ControlSend($sTitle, "", "[CLASS:Edit; INSTANCE:1]", "{END}")
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _PlayDefaultSystemSound()
    ; Description ...: Spielt einen Systemklang, welcher in der Registry definiert ist.
    ; Syntax.........: _PlayDefaultSystemSound($sSoundName, $iWait = 0)
    ; Parameters ....: $sSoundName - Name des SystemSound's
    ; | Default - Standardton Warnsignal / Default Beep
    ; | CriticalBatteryAlarm - Alarm bei kritischem Batteriestand / when battery is critical
    ; | DeviceConnect - Geräteanschluß / when a device is connect
    ; | DeviceDisconnect - Gerätetrennung / when a device is disconnect
    ; | DeviceFail - Geräteanschluß fehlgeschlagen / when a deviceconnect is fail
    ; | LowBatteryAlarm - Alarm bei niedrigem Batteriestand / when battery is low
    ; | MailBeep - Posteingangsbenachrichtigung / when email is received
    ; | SystemAsterisk - Stern / Asterisk
    ; | SystemExclamation - Hinweis / when windows shows a warning
    ; | SystemExit - Windows beenden / when Windows shuts down
    ; | SystemHand - Kritischer Abbruch / when a critical stop occurs
    ; | SystemNotification - Sprechblase / when a critical stop occurs
    ; | SystemStart - Windows starten / when Windows starts up
    ; | WindowsLogoff - beim Windows abmelden / when logging off Windows
    ; | WindowsLogon - beim Windows anmelden / when logging on Windows
    ; | EmptyRecycleBin - Löschen des Papierkorbs / when recycle bin is emptied
    ; | Navigating - Browser Klick / navigating in browser

    [/autoit] [autoit][/autoit] [autoit]

    ; $iWait - Warten bis SoundPlay beendet? (0 = nein / 1 = ja)
    ; Return values .: -----
    ; Author ........: funkey (AutoIt.de)
    ; ===============================================================================================================================
    Func _PlayDefaultSystemSound($sSoundName, $iWait = 0) ; funkey
    Local $sKey = 'HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default'
    If $sSoundName = 'EmptyRecycleBin' Or $sSoundName = 'Navigating' Then $sKey = 'HKEY_CURRENT_USER\AppEvents\Schemes\Apps\Explorer'
    Local $sFile = StringReplace(RegRead($sKey &'\' & $sSoundName & '\.Default', ''), '%SystemRoot%', @WindowsDir)
    If $sFile = "" Then
    SoundPlay(StringReplace(RegRead($sKey &'\.Default\.Default', ''), '%SystemRoot%', @WindowsDir), $iWait)
    Else
    SoundPlay($sFile, $iWait)
    EndIf
    EndFunc ;==>_PlaySystemSound

    [/autoit]

    P.S.: Hier mal wieder mit der Verwendung Deiner "_PlayDefaultSystemSound"-Funktion, funkey. Danke dafür! Die habe ich schon öfter benutzt. :thumbup: