找回密码
 加入
搜索
查看: 4131|回复: 17

[求助]如何判断输入框中是否输入有字符??

[复制链接]
发表于 2009-4-7 22:07:08 | 显示全部楼层 |阅读模式
如何判断输入框中是否有输入有字符??以及如何限制输入框中只能输入数字或字母??
没找到这样的例子...热心人给个例子好吗??

[ 本帖最后由 laojikelly 于 2009-4-20 10:25 编辑 ]
发表于 2009-4-7 22:25:33 | 显示全部楼层
正则表达式
StringRegExpReplace ( 编辑框内容, "[^0-9a-zA-Z]", "",)
 楼主| 发表于 2009-4-8 05:36:08 | 显示全部楼层
不懂。。。太深奥了。。。
发表于 2009-4-8 15:54:10 | 显示全部楼层
google "正则表达式",打开第一个 "正则表达式30分钟入门"
发表于 2009-4-8 22:21:08 | 显示全部楼层
如果只限制为数字,那个简单,在CREATE  INPUT时加上限制数字的样式就OK了

如果需要其他限制,譬如只能输入汉字或只能输入XYZ,那个麻烦些了,论坛里有人谈论过的,一般是监控事件(譬如键盘按上按下),就是一有事件触发某函数进行检测(可用正则),如果有非法字符就把这字符给删掉。。。但这方法不是很完美的,需要考虑的事很多,譬如处理用户粘贴文字问题
 楼主| 发表于 2009-4-9 01:21:17 | 显示全部楼层
好的。。。既然那么多人都说正则表达式。。。那我就去看看了。。。
发表于 2009-4-9 02:02:45 | 显示全部楼层
#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-9a-zA-Z]") = 0就好了。

[ 本帖最后由 pusofalse 于 2009-4-9 02:36 编辑 ]

评分

参与人数 2金钱 +20 贡献 +5 收起 理由
lynfr8 + 10 + 5 学习了
ceoguang + 10 nice code

查看全部评分

发表于 2009-4-9 02:55:33 | 显示全部楼层
楼上的不错,学习了..........
发表于 2009-4-9 11:20:27 | 显示全部楼层
那个“正则表达式30分钟入门”我已经看过10遍了。感觉能看懂,但是需要大量的实践才能掌握。目前我还运用不到“正则表达式”,所以也没有详加研究。怎么讲呢,大凡能来研究AU3的,要弄通“正则”也应该不是难事。楼主,我们一起加油!


[ 本帖最后由 ahphsautoit 于 2009-4-9 11:21 编辑 ]
发表于 2009-4-9 14:11:53 | 显示全部楼层
正则是相通的,但凡学语言的 都会设计到的,学了绝对有用,各个语言里的正则区别很小的
另pusofalse的代码貌似很带劲哦,回头试试
发表于 2009-4-10 10:27:06 | 显示全部楼层
GUICtrlCreateInput("", 10, 5, 300, 20, $ES_NUMBER)
 楼主| 发表于 2009-4-12 06:51:22 | 显示全部楼层
我想大家都误解我意思了。。。
我是想判断输入框里有没有输入字符,不是限制输入英文或者数字。
谢谢大家的回答。
发表于 2009-4-12 07:29:52 | 显示全部楼层

回复 12# laojikelly 的帖子

if $sRead = "" then ...

这个,,,这个,,,我倒。。。
真的要倒了。。。睡觉先,88~~~
发表于 2009-4-12 13:29:52 | 显示全部楼层
大哥你直接说内容为空不就行了吗。。。
发表于 2009-4-12 17:34:39 | 显示全部楼层
做个记号。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-10-3 08:23 , Processed in 0.095461 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表