Hi,
wollt mal fragen, ob man die Eingaben der Inputbox nur auf
Buchstaben begrenzen kann, damit keine Zahlen
geschrieben werden.
(Inputbox) nur Buchstaben
-
- [ gelöst ]
-
Slyfex -
7. Dezember 2009 um 22:35 -
Geschlossen -
Erledigt
-
-
Ich hatte da mal was im englischen Forum gesehen. Ich such mal schnell danach
-
[autoit]
$read = GUICtrlRead($input)
[/autoit]
If Not StringRegExp($read, "[a-zA-Z]") Then MsgBox(0, "Fehler", "Es dürfen nur Buchstaben eingegeben werden!") -
War aber nur für "Numbers-Only"
Habs mal schnell umgebastelt. -
Thx, beides funzt
-
Gleich noch eine andere Frage:
Kann man die GUIInputSetOnlyNumbers.au3 so umschreiben,
dass nur Zahlen von 1 bis 12 möglich sind? -
Puhh vllt mit einem solchen regexp: (ist jetzt aber ungetestet!) ich weiss jetzt auch nicht in welcher reihenfolge du zahlen und buchstaben haben willst etc.
[autoit]StringRegExp($string, "([a-zA-Z])([0-9]{1}|1[0-2]{2})")
[/autoit]Ich hoffe der tuts
Mach am besten mal ein paar beispiele was für Strings du erlauben möchtest und welche nicht
-
Hier ein Regex der (hoffentlich) alle kombinationen von Zahlen bis 12 und Buchstaben zulässt:
[autoit]
zb: Test12Test, 1Test2Test3, Test, 1, 12, 12Test aber nicht 25, 25Test, Test2Test54R usw.StringRegExp($String,"\b([a-zA-Z]+(1[0-2]|[0-9]|\b))+[a-zA-Z]*|\b(1[0-2]|[0-9])((([a-zA-Z]+)+((1[0-2]|[0-9])|\b))+\b|\b)")
[/autoit]
[autoit]
Und hier nur für zahlen von 1-12
[/autoit]
StringRegExp($String,"\b(1[0-2]|\d)\b")Bugfix kann den ersten RegEx wahrscheinlich kürzer schreiben.
Hier meine Testliste:Spoiler anzeigen
Zitattest2 <- Ja
Test1 <- Ja
24test <- Nein
12tes <- Ja
Test12Test <- Ja
12Test2122323 <- Nein
12Test122 <- Nein
12Test12Test12Ttest12 <- Ja
Test12Test2Test3sX2 <- Ja
1 <- Ja
12 <- Ja
Test <- Ja -
Erst danke für die Hilfe, aber bei mir funktioniert beides nicht so wie gewollt
Könnt ihr bitte ein editiertes Script hochladen, indem nur Zahlen von 1 - 12 erlaubt sind, also keine Buchstaben -
[autoit]
StringRegExp($string, "\b([1-9]|1[0-2])\b")
[/autoit]Das geht dann einfach so.
-
Wenn ich die UDF so umändere:
Spoiler anzeigen
[autoit]#include-once
[/autoit] [autoit][/autoit] [autoit]#include
[/autoit] [autoit][/autoit] [autoit]If Not IsDeclared("WM_COMMAND") Then Global Const $WM_COMMAND = 0x0111
[/autoit] [autoit][/autoit] [autoit]
If Not IsDeclared("WM_MOVE") Then Global Const $WM_MOVE = 0x0003
If Not IsDeclared("WM_LBUTTONDOWN") Then Global Const $WM_LBUTTONDOWN = 0x0201
If Not IsDeclared("WM_RBUTTONDOWN") Then Global Const $WM_RBUTTONDOWN = 0x0204Global $sToolTip_Text[2] = ["You can only type a number here", "Unacceptable Character:"]
[/autoit] [autoit][/autoit] [autoit]
Global $sInputs_Array[1]GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
[/autoit] [autoit][/autoit] [autoit]
GUIRegisterMsg($WM_MOVE, "WM_CLEAR_TOOLTIP")
GUIRegisterMsg($WM_LBUTTONDOWN, "WM_CLEAR_TOOLTIP")
GUIRegisterMsg($WM_RBUTTONDOWN, "WM_CLEAR_TOOLTIP"); $CtrlId must be an ID value, -1 can not be used!
[/autoit] [autoit][/autoit] [autoit]
Func _GuiInputSetOnlyNumbers($CtrlId)
Local $iUbound = UBound($sInputs_Array)
ReDim $sInputs_Array[$iUbound+1]
$sInputs_Array[$iUbound] = $CtrlId
EndFuncFunc _Input_Changed($hWnd, $CtrlId)
[/autoit] [autoit][/autoit] [autoit]
ToolTip("")
Local $Read_Input = GUICtrlRead($CtrlId)
If StringRegExp($Read_Input, '\b([1-9]|1[0-2])\b') Then
GUICtrlSetData($CtrlId, StringRegExpReplace($Read_Input, '\b([1-9]|1[0-2])\b', ''))Local $Gui_Get_Pos = WinGetPos($hWnd)
[/autoit] [autoit][/autoit] [autoit]
Local $Ctrl_Get_Pos = ControlGetPos($hWnd, "", $CtrlId)Local Const $SM_CYCAPTION = 4 ;Titelbar heigth
[/autoit] [autoit][/autoit] [autoit]
Local Const $SM_CXFIXEDFRAME = 7 ;Window border sizeLocal $X_Pos = $Gui_Get_Pos[0] + $Ctrl_Get_Pos[0] + $Ctrl_Get_Pos[2] + GetSystemMetrics($SM_CXFIXEDFRAME)
[/autoit] [autoit][/autoit] [autoit]
Local $Y_Pos = $Gui_Get_Pos[1] + $Ctrl_Get_Pos[1] + $Ctrl_Get_Pos[3] + GetSystemMetrics($SM_CYCAPTION)ToolTip($sToolTip_Text[0], $X_Pos, $Y_Pos, $sToolTip_Text[1], 3, 1+4)
[/autoit] [autoit][/autoit] [autoit]
DllCall("user32.dll", "int", "MessageBeep", "int", 0x0)
EndIf
EndFuncFunc WM_CLEAR_TOOLTIP($hWnd, $iMsg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
ToolTip("")
Return $GUI_RUNDEFMSG
EndFuncFunc MY_WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
If $hWnd = 0 Or Not WinExists($hWnd) Then Return $GUI_RUNDEFMSGLocal $nNotifyCode = BitShift($wParam, 16)
[/autoit] [autoit][/autoit] [autoit]
Local $nID = BitAND($wParam, 0xFFFF)
Local Const $EN_CHANGE = 0x300
Local Const $EN_UPDATE = 0x400
Local Const $EN_SETFOCUS = 0x100
Local Const $EN_KILLFOCUS = 0x200For $i = 1 To UBound($sInputs_Array)-1
[/autoit] [autoit][/autoit] [autoit]
If $nID = $sInputs_Array[$i] Then
Switch $nNotifyCode
Case $EN_UPDATE ;$EN_CHANGE
_Input_Changed($hWnd, $sInputs_Array[$i])
Case $EN_SETFOCUS, $EN_KILLFOCUS
ToolTip("")
EndSwitch
ExitLoop
EndIf
NextReturn $GUI_RUNDEFMSG
[/autoit] [autoit][/autoit] [autoit]
EndFuncFunc GetSystemMetrics($Flag)
[/autoit]
Local $iRet = DllCall('user32.dll', 'int', 'GetSystemMetrics', 'int', $Flag)
Return $iRet[0]
EndFunc
Kann ich nur noch Buchstaben eingeben
Ist im Script ein Fehler? -
Ja ist es. Denn das Script sucht nun nach Zahlen von 1-12, und wenn diese Vorhanden sind, gibt es die Fehlermeldung. Der RegEx muss umgedreht werden. Aber ich weiß grad nich wirklich wie (So viel ahnung von Regex hab ich dann doch nicht.) Warte einfach mal bis Bugfix den Thread findet. Der weiß bescheid
-
Ähm das If StringRegExp kannst du einfach durch If Not StringRegExp
Bei dem StringRegExpReplace muss man wie Suebo schon richtig sagte den Regexp umdrehen, wenn du auf diese automatische ersetzen funktion verzichten kannst, kannst du sie vorerst einfach mal auskommentieren.
-
Thx für die Hilfe, jetzt hab ichs
-
StringRegExpReplace muss man wie Suebo schon richtig sagte den Regexp umdrehen
und genau da komm ich nicht weiter.
-
Ganz einfache Lösung von BugFix:
Spoiler anzeigen
[autoit]If Not StringRegExp($Read_Input, '\b([1-9]|1[0-2])\b') Then
[/autoit]
GUICtrlSetData($CtrlId, '')