数値専用にしたいだけなら変数passを数値型にしておくだけでOKだったと思います。
半角英字も使いたいなら以下のようにしてみてください。
(HSP拡張マクロを使用するをオンにしてください)
#include "kernel32.as"
#include "user32.as"
#define EN_CHANGE 0x00000300
#define WM_COMMAND 0x0111
#define EM_GETSEL 0x00B0
#define EM_SETSEL 0x00B1
sdim pass,256
input pass : iInput = stat ;文字列型input
button "output", *lb_output
oncmd gosub *lb_OnCommand, WM_COMMAND
flag = 1
stop
*lb_OnCommand
if lparam != objinfo(iInput, 2) : return
if (wparam>>16&0xFFFF) == EN_CHANGE && flag {
l = strlen(pass)
sdim tmp, l+1
offset = 0
count = 0
repeat l
c = peek(pass, cnt)
// 2byte文字か調べる
IsDBCSLeadByte c
if stat : count+=2 : continue cnt+2
// アルファベットと数字か調べる
IsCharAlphaNumeric c
if stat == 0 : count++ : continue cnt+1
// 半角英数ならtmpに追加
poke tmp, offset, c
offset++
loop
if count {
// inputの更新とキャレット位置の調整
sendmsg objinfo(iInput, 2), EM_GETSEL, 0, 0
i = stat
pass = tmp
flag = 0 //oncmd 0でも可
objprm iInput, pass ; 実行しなくても内部では半角英数のみになっている
flag = 1 //oncmd 1でも可
sendmsg objinfo(iInput, 2), EM_SETSEL, i-count, i-count
return 0
}
}
return
*lb_output
mes pass
stop