[求助]如何判断输入框中是否输入有字符??
如何判断输入框中是否有输入有字符??以及如何限制输入框中只能输入数字或字母??没找到这样的例子...热心人给个例子好吗??
[ 本帖最后由 laojikelly 于 2009-4-20 10:25 编辑 ] 正则表达式
StringRegExpReplace ( 编辑框内容, "[^0-9a-zA-Z]", "",) 不懂。。。太深奥了。。。 google "正则表达式",打开第一个 "正则表达式30分钟入门" 如果只限制为数字,那个简单,在CREATEINPUT时加上限制数字的样式就OK了
如果需要其他限制,譬如只能输入汉字或只能输入XYZ,那个麻烦些了,论坛里有人谈论过的,一般是监控事件(譬如键盘按上按下),就是一有事件触发某函数进行检测(可用正则),如果有非法字符就把这字符给删掉。。。但这方法不是很完美的,需要考虑的事很多,譬如处理用户粘贴文字问题 好的。。。既然那么多人都说正则表达式。。。那我就去看看了。。。 #include <WinAPI.au3>
If not IsDeclared("WM_CHAR") Then CONST $WM_CHAR = 0x102
If not IsDeclared("WM_PASTE") Then CONST $WM_PASTE = 0x302
If not IsDeclared("WM_SETTEXT") Then CONST $WM_SETTEXT = 0xc
$hGUI = GUICreate("Test", 200, 100)
$iIptTest = GUICtrlCreateInput("", 20, 20, 160, 20)
$hIpt = GUICtrlGetHandle(-1)
$hIptProc = DllCallbackRegister("_IptProc", "int", "hWnd;uint;wparam;lparam")
$pIptProc = DllCallbackGetPtr($hIptProc)
$hOldProc = _WinAPI_SetWindowLong($hIpt, -4, $pIptProc)
GUISetState()
Do
Until guiGetMsg() = -3
Func _IptProc($hWnd, $iMsg, $wParam, $lParam)
ConsoleWrite("0x" & Hex($iMsg) & @CRLF)
If $iMsg = $WM_CHAR Then
If $wparam <> 8 And $wparam < 128 Then
_WinAPI_MessageBeep(2)
Return False
EndIf
ElseIf $iMsg = $WM_PASTE Then
If StringRegExp(ClipGet(), "[\x20-\x7f]") Then Return False
ElseIf $iMsg = $WM_SETTEXT Then
_WinAPI_MessageBeep(2)
Return False
EndIf
Return _WinAPI_CallWindowProc($hOldProc, $hWnd, $iMsg, $wParam, $lParam)
EndFunc ;==>_IptProc()
以上,限制只能输入/粘贴汉字。。。若限制只能输入英文和数字,把$wparam < 128 改为StringRegExp(Chr($wparam), "") = 0就好了。
[ 本帖最后由 pusofalse 于 2009-4-9 02:36 编辑 ] 楼上的不错,学习了.......... 那个“正则表达式30分钟入门”我已经看过10遍了。感觉能看懂,但是需要大量的实践才能掌握。目前我还运用不到“正则表达式”,所以也没有详加研究。怎么讲呢,大凡能来研究AU3的,要弄通“正则”也应该不是难事。楼主,我们一起加油!
:face (29):
[ 本帖最后由 ahphsautoit 于 2009-4-9 11:21 编辑 ] 正则是相通的,但凡学语言的 都会设计到的,学了绝对有用,各个语言里的正则区别很小的
另pusofalse的代码貌似很带劲哦,回头试试 GUICtrlCreateInput("", 10, 5, 300, 20, $ES_NUMBER) 我想大家都误解我意思了。。。
我是想判断输入框里有没有输入字符,不是限制输入英文或者数字。
谢谢大家的回答。
回复 12# laojikelly 的帖子
if $sRead = "" then ...这个,,,这个,,,我倒。。。
真的要倒了。。。睡觉先,88~~~ 大哥你直接说内容为空不就行了吗。。。 做个记号。
页:
[1]
2