--- title: 编辑框数据有效性判断 updated: 2022-03-14 07:46:12Z created: 2022-01-17 02:27:09Z tags: - 数据筛选 --- 数据有效性判断可分为两个部分,一是对单次输入的数字判断,滤除无效字符,二是输入完毕后对整个数据进行判断,如区间检查等 # 过滤单个字符 在输入时限制无效字符输入 ```js winform.plus.editBox.wndproc = function(hwnd,message,wParam,lParam){ if(message == 0x102/*_WM_CHAR*/){//对输入字符进行约束,不能识别非eng输入法状态下的输入 if(wParam >= '0'# and wParam <= '9'#){ return ; } destr = wParam select(wParam) { case '-'# { if(min > 0){ return 1; } if(tmp2){ key.press(0x8/*_VK_BACK*/) } if(string.indexOf(ctrl.text,'-')){ ctrl.text = string.trimleft(ctrl.text,"-") ctrl.setsel(tmp-1) return 1; } else { ctrl.text = string.concat("-",ctrl.text) ctrl.setsel(tmp+1) return 1; } } case 'e'#, 'E'# { if(!string.indexOf(ctrl.text,'E') and !string.indexOf(ctrl.text,'e')){ return; } } case '.'# { if(!string.indexOf(ctrl.text,'.')){ return ; } } case 'g'#, 'G'# { if(tmp2){ key.press(0x8/*_VK_BACK*/) } if(ctrl.text != ""){ ctrl.text = tonumber(ctrl.text) * 1e3 ctrl.setsel(-1) } return 1; } case 'm'#, 'M'# { if(tmp2){ key.press(0x8/*_VK_BACK*/) } if(ctrl.text != ""){ ctrl.text = tonumber(ctrl.text) * 1e0 ctrl.setsel(-1) } return 1; } case 'k'#, 'K'# { if(tmp2){ key.press(0x8/*_VK_BACK*/) } if(ctrl.text != ""){ ctrl.text = tonumber(ctrl.text) / 1e3 ctrl.setsel(-1) } return 1; } case 0x11/*_VK_CTRL*/{ if(!tmp2){ var str = string.slice(ctrl.text,tmp,tmp2); if(#tonumber(str) == #str){ //左侧数字+1 } } } } return 1; //其余字符全部屏蔽 } ``` # 检查单次数据 在编辑框更新后判断上限有效性 ```js case 0x300/*_EN_CHANGE*/ { if(tonumber(owner.text) >= 1e3){//判断新数据范围 owner.text = lstValue//无效时恢复最后一次有效数据 owner.setsel(tmp)//恢复光标位置 } lstValue = owner.text//更新最后一次有效数据 } ``` 在失去焦点后评断下限有效性 #数据筛选